CharacterArray.st
author Claus Gittinger <cg@exept.de>
Wed, 03 Apr 2013 21:12:25 +0200
changeset 15055 99961534feb1
parent 15035 ecbb70df7a5c
child 15167 62b89f82633c
child 18045 c0c600e0d3b3
permissions -rw-r--r--
class: CharacterArray added: #findRangeOfString: #rangeOfSubCollection:startingAt:ifAbsent:caseSensitive:
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
14137
1eb1b4a3f364 Inherit from UninterpretedBytes instead of ByteArray
Stefan Vogel <sv@exept.de>
parents: 14122
diff changeset
    14
UninterpretedBytes 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
14452
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   198
    (str peekOrNil == $') ifTrue:[
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   199
        str next.
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   200
        collected := self writeStream.
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   201
        [str atEnd] whileFalse:[
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   202
            char := str next.
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   203
            char == $' ifTrue:[
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   204
                "/ look for another quote
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   205
                str peekOrNil ~~ $' ifTrue:[
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   206
                    "end of string reached"
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   207
                    ^ collected contents.
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   208
                ].
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   209
                "eat doubled quote"
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   210
                str next.
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   211
            ].
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   212
            ((char ~~ Character return) or:[str peekOrNil ~~ Character lf]) ifTrue:[
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   213
                "compress CRLF to LF, but keep a single CR"
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   214
                collected nextPut:char.
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   215
            ].
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   216
        ].
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   217
        "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
   218
    ].
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   219
    ^ exceptionBlock value
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
    "
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:('''hello '''' world''' readStream)
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   224
     String readFrom:('1 ''hello'' ' readStream)
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   225
     String readFrom:('1 ''hello'' ' readStream) onError:['foobar']
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
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   228
    "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
   229
    "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
   230
!
4bf099f5bb56 CharacterArray class>>#writeStream - answer a CharacterWriteStrem
Stefan Vogel <sv@exept.de>
parents: 11229
diff changeset
   231
13201
848ccc41fc90 added: #writeStreamClass
Claus Gittinger <cg@exept.de>
parents: 13170
diff changeset
   232
writeStreamClass
848ccc41fc90 added: #writeStreamClass
Claus Gittinger <cg@exept.de>
parents: 13170
diff changeset
   233
    "the class used by writeStream"
848ccc41fc90 added: #writeStreamClass
Claus Gittinger <cg@exept.de>
parents: 13170
diff changeset
   234
848ccc41fc90 added: #writeStreamClass
Claus Gittinger <cg@exept.de>
parents: 13170
diff changeset
   235
    ^ CharacterWriteStream
11243
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
    "
4bf099f5bb56 CharacterArray class>>#writeStream - answer a CharacterWriteStrem
Stefan Vogel <sv@exept.de>
parents: 11229
diff changeset
   238
     String writeStream
4bf099f5bb56 CharacterArray class>>#writeStream - answer a CharacterWriteStrem
Stefan Vogel <sv@exept.de>
parents: 11229
diff changeset
   239
    "
13201
848ccc41fc90 added: #writeStreamClass
Claus Gittinger <cg@exept.de>
parents: 13170
diff changeset
   240
848ccc41fc90 added: #writeStreamClass
Claus Gittinger <cg@exept.de>
parents: 13170
diff changeset
   241
    "Created: / 09-01-2011 / 10:37:57 / cg"
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
   242
! !
af7aeb79b25e Initial revision
claus
parents:
diff changeset
   243
9265
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   244
!CharacterArray class methodsFor:'Compatibility-VW'!
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   245
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   246
fromIntegerArray: anArray
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   247
    "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
   248
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   249
    | new |
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   250
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   251
    new := self new: anArray size.
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   252
    1 to: anArray size do:[:index |
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   253
	new at: index put: (anArray at: index) asCharacter
9265
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   254
    ].
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   255
    ^new
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
     String fromIntegerArray: #[8 127]
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   259
    "
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   260
! !
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   261
2728
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   262
!CharacterArray class methodsFor:'Signal constants'!
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   263
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   264
decodingFailedSignal
2833
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   265
    "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
   266
     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
   267
     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
   268
     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
   269
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   270
    ^ DecodingFailedSignal
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   271
2833
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   272
    "Created: 28.6.1997 / 20:09:55 / cg"
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   273
    "Modified: 3.8.1997 / 18:16:47 / cg"
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   274
!
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   275
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   276
encodingFailedSignal
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   277
    "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
   278
     due to invalid characters contained in the source."
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   279
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   280
    ^ EncodingFailedSignal
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   281
2728
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   282
    "Modified: 28.6.1997 / 20:09:35 / cg"
2833
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   283
    "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
   284
! !
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   285
1849
9f35f5934ec6 added msdos-latin1 en/decoder (code = #msdos850)
Claus Gittinger <cg@exept.de>
parents: 1669
diff changeset
   286
!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
   287
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   288
lowSpaceCleanup
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   289
    "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
   290
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   291
    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
   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
     CharacterArray lowSpaceCleanup
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   295
    "
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
    "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
   298
    "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
   299
! !
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   300
7421
4e6c6edb90d9 category rename
Claus Gittinger <cg@exept.de>
parents: 7349
diff changeset
   301
!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
   302
7876
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   303
decodeFromUTF8:aStringOrByteCollection
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   304
    "return a string which represents the characters as decoded
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   305
     from the utf8 encoded bytes, aByteCollection.
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   306
     Returns either a normal String, or a TwoByteString instance.
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   307
     Only useful, when reading twoByteStrings from external sources.
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   308
     This only handles up-to 16bit characters."
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   309
8124
ca774158b317 code cleanup (removed old obsolete encoding stuff)
Claus Gittinger <cg@exept.de>
parents: 8102
diff changeset
   310
    ^ CharacterEncoderImplementations::ISO10646_to_UTF8 decodeString:aStringOrByteCollection
7876
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   311
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   312
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   313
     CharacterArray fromUTF8Bytes:#[ 16r41 16r42 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   314
     CharacterArray fromUTF8Bytes:#[ 16rC1 16r02 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   315
     CharacterArray fromUTF8Bytes:#[ 16rE0 16r81 16r02 ]
7876
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   316
     CharacterArray fromUTF8Bytes:#[ 16rEF 16rBF 16rBF ]
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   317
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   318
   rfc2279 examples:
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   319
     CharacterArray fromUTF8Bytes:#[ 16r41 16rE2 16r89 16rA2 16rCE 16r91 16r2E ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   320
     CharacterArray fromUTF8Bytes:#[ 16rED 16r95 16r9C 16rEA 16rB5 16rAD 16rEC 16r96 16rB4 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   321
     CharacterArray fromUTF8Bytes:#[ 16rE6 16r97 16rA5 16rE6 16r9C 16rAC 16rE8 16rAA 16r9E ]
7876
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   322
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   323
   invalid:
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   324
     CharacterArray fromUTF8Bytes:#[ 16rC0 16r80 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   325
     CharacterArray fromUTF8Bytes:#[ 16rE0 16r80 16r80 ]
7876
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   326
    "
443
Claus Gittinger <cg@exept.de>
parents: 428
diff changeset
   327
! !
Claus Gittinger <cg@exept.de>
parents: 428
diff changeset
   328
1849
9f35f5934ec6 added msdos-latin1 en/decoder (code = #msdos850)
Claus Gittinger <cg@exept.de>
parents: 1669
diff changeset
   329
!CharacterArray class methodsFor:'pattern matching'!
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
   330
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
   331
matchEscapeCharacter
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
   332
    "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
   333
     (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
   334
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
   335
    ^ $\
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
   336
!
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
   337
327
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   338
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
   339
    "helper for match; return true if the characters from start to stop in
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   340
     aString are matching the scan in matchScan from matchStart to matchStop.
328
claus
parents: 327
diff changeset
   341
     The matchScan is as created by asMatchScanArray.
327
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   342
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   343
     This algorithm is not at all the most efficient;
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   344
     for heavy duty pattern matching, an interface (primitive) to the regex
328
claus
parents: 327
diff changeset
   345
     pattern matching package should be added."
327
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   346
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   347
    |matchEntry
327
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   348
     mStart "{ Class: SmallInteger }"
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   349
     mStop  "{ Class: SmallInteger }"
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   350
     sStart "{ Class: SmallInteger }"
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   351
     sStop  "{ Class: SmallInteger }"
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   352
     mSize  "{ Class: SmallInteger }"
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   353
     sSize  "{ Class: SmallInteger }"
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   354
     index  "{ Class: SmallInteger }"
2561
205ee33decf9 removed unused var
Claus Gittinger <cg@exept.de>
parents: 2554
diff changeset
   355
     quickCheck matchLast nextMatchEntry
986
c3a9f590146d removed unused locals
Claus Gittinger <cg@exept.de>
parents: 915
diff changeset
   356
     checkChar included|
327
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   357
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   358
    mStart := matchStart.
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   359
    mStop := matchStop.
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   360
    sStart := start.
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   361
    sStop := stop.
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   362
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   363
    [true] whileTrue:[
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   364
"/ Transcript showCR:('match: ''' , (aString copyFrom:sStart to:sStop) ,
3537
916534e86f0c fixed match
Claus Gittinger <cg@exept.de>
parents: 3527
diff changeset
   365
"/                    ''' against:' , (matchScanArray copyFrom:mStart to:mStop) printString).
916534e86f0c fixed match
Claus Gittinger <cg@exept.de>
parents: 3527
diff changeset
   366
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   367
	mSize := mStop - mStart + 1.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   368
	sSize := sStop - sStart + 1.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   369
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   370
	"empty strings match"
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   371
	(mSize == 0) ifTrue:[^ (sSize == 0)].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   372
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   373
	matchEntry := matchScanArray at:mStart.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   374
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   375
	"/ the most common case first:
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   376
	(sSize ~~ 0
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   377
	and:[(checkChar := (aString at:sStart)) = matchEntry]) ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   378
	    "advance by one and continue"
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   379
	    mStart := mStart + 1.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   380
	    sStart := sStart + 1
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   381
	] ifFalse:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   382
	    (matchEntry == #any) ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   383
		"restString empty -> no match"
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   384
		(sSize == 0) ifTrue:[^ false].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   385
		"# matches single character"
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   386
		((sSize == 1) and:[mSize == 1]) ifTrue:[^ true].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   387
		"advance by one and continue"
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   388
		mStart := mStart + 1.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   389
		sStart := sStart + 1
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   390
	    ] ifFalse:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   391
		(matchEntry == #anyString) ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   392
		    "* alone matches anything"
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   393
		    (mSize == 1) ifTrue:[^ true].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   394
		    "restString empty & matchString not empty -> no match"
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   395
		    (sSize == 0) ifTrue:[^ false].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   396
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   397
		    "
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   398
		     try to avoid some of the recursion by checking last
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   399
		     character and continue with shortened strings if possible
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   400
		    "
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   401
		    quickCheck := false.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   402
		    (mStop >= mStart) ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   403
			matchLast := matchScanArray at:mStop.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   404
			(matchLast ~~ #anyString) ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   405
			    (matchLast == #any) ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   406
				quickCheck := true
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   407
			    ] ifFalse:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   408
				matchLast == (aString at:sStop) ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   409
				    quickCheck := true
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   410
				] ifFalse:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   411
				    matchLast isString ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   412
					quickCheck := matchLast includes:(aString at:sStop)
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   413
				    ]
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   414
				]
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   415
			    ]
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   416
			]
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   417
		    ].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   418
		    quickCheck ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   419
			"
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   420
			 quickCheck ok, advance from the right
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   421
			"
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   422
			mStop := mStop - 1.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   423
			sStop := sStop - 1
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   424
		    ] ifFalse:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   425
			"/ no quick check;
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   426
			"/ look for the next character(s)
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   427
			"/ and try matching there
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   428
			"/ (to avoid recursion)
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   429
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   430
			mStart < mStop ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   431
			    nextMatchEntry := matchScanArray at:mStart+1.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   432
			    nextMatchEntry isCharacter ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   433
				sStart <= sStop ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   434
				    [true] whileTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   435
					ignoreCase ifFalse:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   436
					    index := aString indexOf:nextMatchEntry startingAt:sStart
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   437
					] ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   438
					    index := aString findFirst:[:c | c asLowercase = nextMatchEntry asLowercase]
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   439
							   startingAt:sStart.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   440
					].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   441
					(index == 0 or:[index > sStop]) ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   442
					    ^ false
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   443
					].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   444
					(self matchScan:matchScanArray
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   445
					      from:(mStart + 1)
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   446
					      to:mStop
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   447
					      with:aString
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   448
					      from:index
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   449
					      to:sStop
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   450
					      ignoreCase:ignoreCase
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   451
					) ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   452
					    ^ true
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   453
					].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   454
					sStart := index + 1.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   455
				    ]
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   456
				]
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   457
			    ]
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   458
			].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   459
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   460
			"
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   461
			 no quick check possible;
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   462
			 loop over all possible substrings
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   463
			"
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   464
			index := sStart.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   465
			[index <= sStop] whileTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   466
			    (self matchScan:matchScanArray
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   467
				  from:(mStart + 1)
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   468
				  to:mStop
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   469
				  with:aString
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   470
				  from:index
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   471
				  to:sStop
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   472
				  ignoreCase:ignoreCase
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   473
			    ) ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   474
				^ true
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   475
			    ].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   476
			    index := index + 1
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   477
			].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   478
			^ false
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   479
		    ].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   480
		] ifFalse:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   481
		    (matchEntry isString) ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   482
			"testString empty -> no match"
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   483
			(sSize == 0) ifTrue:[^ false].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   484
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   485
			included := false.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   486
			"/ checkChar := aString at:sStart.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   487
			included := matchEntry includes:checkChar.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   488
			included ifFalse:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   489
			    ignoreCase ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   490
				checkChar isUppercase ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   491
				    included := matchEntry includes:checkChar asLowercase.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   492
				] ifFalse:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   493
				    included := matchEntry includes:checkChar asUppercase.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   494
				]
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   495
			    ].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   496
			].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   497
			mStart := mStart + 1.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   498
			mSize := mSize - 1.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   499
			included ifFalse:[^ false].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   500
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   501
			((sSize == 1) and:[mSize == 0]) ifTrue:[^ true].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   502
		    ] ifFalse:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   503
			"/ must be single character
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   504
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   505
			"testString empty ?"
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   506
			(sSize == 0) ifTrue:[^ false].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   507
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   508
			"first characters equal ?"
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   509
			"/ checkChar := aString at:sStart.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   510
			ignoreCase ifFalse:[^ false].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   511
			(checkChar asUppercase ~= matchEntry asUppercase) ifTrue:[^ false].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   512
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   513
			"advance and continue"
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   514
			mStart := mStart + 1.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   515
		    ].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   516
		    "cut off 1st char and continue"
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   517
		    sStart := sStart + 1
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   518
		]
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   519
	    ]
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   520
	]
2519
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
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 s|
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   525
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   526
     scanArray := self matchScanArrayFrom:'*hello'.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   527
     s := 'foo bar hello world'.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   528
     CharacterArray
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   529
	 matchScan:scanArray
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   530
	 from:1
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   531
	 to:scanArray size
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   532
	 with:s
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   533
	 from:1
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   534
	 to:s size
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   535
	 ignoreCase:false
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   536
    "
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 s|
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   539
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   540
     scanArray := self matchScanArrayFrom:'*hello*'.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   541
     s := 'foo bar hello world'.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   542
     CharacterArray
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   543
	 matchScan:scanArray
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   544
	 from:1
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   545
	 to:scanArray size
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   546
	 with:s
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   547
	 from:1
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   548
	 to:s size
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   549
	 ignoreCase:false
13520
52597f7f6ff8 changed:
Claus Gittinger <cg@exept.de>
parents: 13511
diff changeset
   550
    "
52597f7f6ff8 changed:
Claus Gittinger <cg@exept.de>
parents: 13511
diff changeset
   551
52597f7f6ff8 changed:
Claus Gittinger <cg@exept.de>
parents: 13511
diff changeset
   552
    "Modified: / 24-07-2011 / 07:17:03 / cg"
52597f7f6ff8 changed:
Claus Gittinger <cg@exept.de>
parents: 13511
diff changeset
   553
    "Modified (comment): / 24-07-2011 / 08:55:14 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   554
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   555
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   556
matchScanArrayFrom:aString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   557
    "scan a pattern string and decompose it into a scanArray.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   558
     This is processed faster (especially with character ranges), and
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   559
     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
   560
9282
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   561
    ^ self matchScanArrayFrom:aString escapeCharacter:(self matchEscapeCharacter)
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   562
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   563
    "
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   564
     String matchScanArrayFrom:'*ute*'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   565
     String matchScanArrayFrom:'**ute**'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   566
     String matchScanArrayFrom:'*uter'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   567
     String matchScanArrayFrom:'\*uter'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   568
     String matchScanArrayFrom:'[cC]#mpute[rR]'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   569
     String matchScanArrayFrom:'[abcd]*'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   570
     String matchScanArrayFrom:'[a-k]*'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   571
     String matchScanArrayFrom:'*some*compl*ern*'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   572
     String matchScanArrayFrom:'[a-'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   573
     String matchScanArrayFrom:'[a-zA-Z]'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   574
     String matchScanArrayFrom:'[a-z01234A-Z]'
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
    "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
   578
!
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   579
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   580
matchScanArrayFrom:aString escapeCharacter:escape
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   581
    "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
   582
     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
   583
     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
   584
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   585
    |coll
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   586
     idx "{ Class: SmallInteger }"
9282
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   587
     end c1 c2 matchSet previous|
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
   588
5487
cb4c5ae75c63 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5469
diff changeset
   589
    previous := nil.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   590
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   591
    coll := OrderedCollection new.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   592
    idx := 1. end := aString size.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   593
    [idx <= end] whileTrue:[
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   594
	|char this|
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   595
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   596
	char := aString at:idx.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   597
	char == $* ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   598
	    previous ~~ #anyString ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   599
		this := #anyString
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   600
	    ]
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   601
	] ifFalse:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   602
	    char == $# ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   603
		previous ~~ #anyString ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   604
		    this := #any
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   605
		]
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   606
	    ] ifFalse:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   607
		char == $[ ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   608
		    matchSet := IdentitySet new.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   609
		    idx := idx + 1.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   610
		    idx > end ifTrue:[^ nil].
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   611
		    char := aString at:idx.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   612
		    c1 := nil.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   613
		    [char ~~ $]] whileTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   614
			((char == $-) and:[c1 notNil]) ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   615
			    idx := idx + 1.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   616
			    idx > end ifTrue:[^ nil].
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   617
			    c2 := aString at:idx.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   618
			    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
   619
			    c1 := nil.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   620
			    idx := idx + 1.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   621
			] ifFalse:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   622
			    (char ~~ $]) ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   623
				matchSet add:char.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   624
				c1 := char.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   625
				idx := idx + 1
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   626
			    ]
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
			idx > end ifTrue:[^ nil].
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   629
			char := aString at:idx
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   630
		    ].
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   631
		    this := matchSet asString
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   632
		] ifFalse:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   633
		    char == escape ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   634
			idx := idx + 1.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   635
			idx > end ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   636
			    "/ mhmh - what should we do here ?
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   637
			    this := char
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 := aString at:idx.
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
		    ] ifFalse:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   642
			this := char
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
		]
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   645
	    ]
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   646
	].
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   647
	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
   648
	idx := idx + 1
608
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
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   651
    ^ coll asArray
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   652
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   653
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   654
     String matchScanArrayFrom:'*ute*'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   655
     String matchScanArrayFrom:'**ute**'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   656
     String matchScanArrayFrom:'*uter'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   657
     String matchScanArrayFrom:'\*uter'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   658
     String matchScanArrayFrom:'[cC]#mpute[rR]'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   659
     String matchScanArrayFrom:'[abcd]*'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   660
     String matchScanArrayFrom:'[a-k]*'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   661
     String matchScanArrayFrom:'*some*compl*ern*'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   662
     String matchScanArrayFrom:'[a-'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   663
     String matchScanArrayFrom:'[a-zA-Z]'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   664
     String matchScanArrayFrom:'[a-z01234A-Z]'
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   665
    "
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   666
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   667
    "Modified: 2.4.1997 / 16:20:29 / cg"
9192
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
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   670
!CharacterArray class methodsFor:'queries'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   671
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   672
isAbstract
11229
4fa83d5e806d comment
Claus Gittinger <cg@exept.de>
parents: 11179
diff changeset
   673
    "Return if this class is an abstract class.
4fa83d5e806d comment
Claus Gittinger <cg@exept.de>
parents: 11179
diff changeset
   674
     True is returned for CharacterArray here; false for subclasses.
4fa83d5e806d comment
Claus Gittinger <cg@exept.de>
parents: 11179
diff changeset
   675
     Abstract subclasses must redefine again."
4fa83d5e806d comment
Claus Gittinger <cg@exept.de>
parents: 11179
diff changeset
   676
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   677
    ^ self == CharacterArray
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   678
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   679
15055
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
   680
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   681
!CharacterArray methodsFor:'Compatibility-ANSI'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   682
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   683
addLineDelimiters
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   684
    "Ansi compatibility - same as withCRs"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   685
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   686
    ^ self withCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   687
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   688
    "Modified: / 13.11.2001 / 19:16:25 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   689
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   690
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   691
!CharacterArray methodsFor:'Compatibility-Dolphin'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   692
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   693
argumentCount
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   694
    "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
   695
     as selector would take."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   696
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   697
    ^  self numArgs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   698
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   699
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   700
copyExpanding:expandTable
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   701
    "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
   702
     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
   703
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   704
    |ds|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   705
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   706
    ds := WriteStream on:(self species new).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   707
    self do:[:eachChar |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   708
	|repl|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   709
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   710
	repl := expandTable at:eachChar ifAbsent:nil.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   711
	repl isNil ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   712
	    ds nextPut:eachChar
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   713
	] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   714
	    repl size == 0 ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   715
		ds nextPut:repl
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   716
	    ] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   717
		ds nextPutAll:repl
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   718
	    ]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   719
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   720
    ].
6870
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   721
    ^ ds contents.
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   722
!
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   723
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   724
formatWith:aString
11955
1230c6953d49 comments
Claus Gittinger <cg@exept.de>
parents: 11919
diff changeset
   725
    "Compatibility method - do not use in new code.
1230c6953d49 comments
Claus Gittinger <cg@exept.de>
parents: 11919
diff changeset
   726
     same as #bindWith: for dolphin compatibility"
6870
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   727
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   728
    ^ self bindWith:aString
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   729
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   730
    "
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   731
     'hello%1world' formatWith:'123'
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   732
    "
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   733
!
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   734
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   735
formatWith:arg1 with:arg2
11955
1230c6953d49 comments
Claus Gittinger <cg@exept.de>
parents: 11919
diff changeset
   736
    "Compatibility method - do not use in new code.
1230c6953d49 comments
Claus Gittinger <cg@exept.de>
parents: 11919
diff changeset
   737
     same as #bindWith: for dolphin compatibility"
6870
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   738
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   739
    ^ self bindWith:arg1 with:arg2
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   740
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   741
    "
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   742
     'hello%1 %2world' formatWith:'123' with:234
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   743
    "
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   744
!
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   745
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   746
formatWith:arg1 with:arg2 with:arg3
11955
1230c6953d49 comments
Claus Gittinger <cg@exept.de>
parents: 11919
diff changeset
   747
    "Compatibility method - do not use in new code.
1230c6953d49 comments
Claus Gittinger <cg@exept.de>
parents: 11919
diff changeset
   748
     same as #bindWith: for dolphin compatibility"
6870
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   749
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   750
    ^ self bindWith:arg1 with:arg2 with:arg3
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   751
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   752
    "
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   753
     'hello%1 %2 %3world' formatWith:'123' with:234 with:345
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   754
    "
6391
ff9f6df9ec4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6228
diff changeset
   755
! !
ff9f6df9ec4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6228
diff changeset
   756
14681
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   757
!CharacterArray methodsFor:'Compatibility-GNU'!
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   758
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   759
% anArrayOfOperands
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   760
    "return a copy of the receiver, where a '%i' escape
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   761
     is replaced by the coresponding string from the argument array.
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   762
     'i' may be between 1 and 9 (i.e. a maximum of 9 placeholders is allowed).
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   763
     Added for GNU-ST compatibility."
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   764
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   765
    ^ self expandPlaceholdersWith:anArrayOfOperands
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   766
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   767
    "
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   768
     'do you prefer %1 or rather %2 (not talking about %3) ?'
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   769
        % #('smalltalk' 'c++' 'c')
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   770
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   771
     'do you %(what) ?'
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   772
        % (Dictionary new at:#'what' put:'understand'; yourself)
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   773
    "
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   774
! !
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   775
7261
f35fc9cee675 method category rename
Claus Gittinger <cg@exept.de>
parents: 7247
diff changeset
   776
!CharacterArray methodsFor:'Compatibility-ST/V'!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   777
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   778
byteAt:index put:aByte
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   779
    "store a byte at given index.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   780
     This is an ST/V compatibility method."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   781
1333
d3fdca956f0d allow storing of 0-bytes (be careful with printing then ...)
Claus Gittinger <cg@exept.de>
parents: 1312
diff changeset
   782
"/    (aByte == 0) ifTrue:[
d3fdca956f0d allow storing of 0-bytes (be careful with printing then ...)
Claus Gittinger <cg@exept.de>
parents: 1312
diff changeset
   783
"/        "store a space instead"
d3fdca956f0d allow storing of 0-bytes (be careful with printing then ...)
Claus Gittinger <cg@exept.de>
parents: 1312
diff changeset
   784
"/        ^ 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
   785
"/    ].
11754
5132248cfd6e common definition of #byteAt:put between CharacterArray and Symbol
Stefan Vogel <sv@exept.de>
parents: 11632
diff changeset
   786
    ^ self basicAt:index put:(Character value:aByte)
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   787
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   788
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   789
     'hello' copy at:1 put:$H asciiValue; yourself
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   790
     'hello' copy byteAt:1 put:72; yourself
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   791
     'hello' copy byteAt:1 put:0; yourself
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   792
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   793
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   794
    "Modified: 6.5.1996 / 10:35:26 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   795
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   796
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   797
replChar:oldChar with:newChar
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   798
    "return a copy of the receiver, with all oldChars replaced
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   799
     by newChar.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   800
     This is an ST/V compatibility method."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   801
3656
347ea0413b68 use #copyReplaceAll:with:
Claus Gittinger <cg@exept.de>
parents: 3630
diff changeset
   802
    ^ self copyReplaceAll:oldChar with:newChar
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   803
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   804
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   805
     '12345678901234567890' replChar:$0 with:$*
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   806
    "
3656
347ea0413b68 use #copyReplaceAll:with:
Claus Gittinger <cg@exept.de>
parents: 3630
diff changeset
   807
347ea0413b68 use #copyReplaceAll:with:
Claus Gittinger <cg@exept.de>
parents: 3630
diff changeset
   808
    "Modified: / 18.7.1998 / 22:52:57 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   809
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   810
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   811
replChar:oldChar withString:newString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   812
    "return a copy of the receiver, with all oldChars replaced
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   813
     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
   814
     This is an ST/V compatibility method."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   815
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   816
    |tmpStream|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   817
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   818
    tmpStream := WriteStream on:(self class new).
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   819
    self do:[:element |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   820
	element = oldChar ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   821
	    tmpStream nextPutAll:newString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   822
	] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   823
	    tmpStream nextPut:element
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   824
	].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   825
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   826
    ^ tmpStream contents
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   827
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   828
   "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   829
     '12345678901234567890' replChar:$0 withString:'foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   830
     'a string with spaces' replChar:$  withString:' foo '
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   831
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   832
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   833
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   834
replString:subString withString:newString
4244
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   835
    "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
   836
     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
   837
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
   838
    ^ self copyReplaceString:subString withString:newString
4244
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   839
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   840
   "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   841
     '12345678901234567890' replString:'123' withString:'OneTwoThree'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   842
     '12345678901234567890' replString:'123' withString:'*'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   843
     '12345678901234567890' replString:'234' withString:'foo'
4244
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   844
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   845
     ('a string with spaces' replChar:$  withString:' foo ')
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   846
	replString:'foo' withString:'bar'
4244
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   847
    "
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   848
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
   849
    "Modified: / 12-05-2004 / 12:00:27 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   850
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   851
9275
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   852
subString:start to:end
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   853
    ^ self copyFrom:start to:end
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   854
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   855
   "
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   856
     '12345678901234567890' subString:3 to:8
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   857
    "
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   858
!
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   859
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   860
trimBlanks
14992
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
   861
    "return a copy of the receiver without leading and trailing spaces.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   862
     This is an ST/V compatibility method."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   863
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   864
    ^ self withoutSpaces
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   865
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   866
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   867
     '    spaces at beginning' trimBlanks
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   868
     'spaces at end    ' trimBlanks
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   869
     '    spaces at beginning and end     ' trimBlanks
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   870
     'no spaces' trimBlanks
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
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   873
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   874
!CharacterArray methodsFor:'Compatibility-Squeak'!
4409
86e049b21f8d added #includesSubstring:caseSensitive:
Claus Gittinger <cg@exept.de>
parents: 4389
diff changeset
   875
6148
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   876
asDate
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   877
    "Many allowed forms, see Date.readFrom:"
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   878
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   879
    ^ Date readFrom: (ReadStream on: self)
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   880
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   881
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   882
     '30 Apr 1999' asDate dayName capitalized
6148
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   883
    "
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   884
!
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   885
8971
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
   886
asUrl
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
   887
    ^ self asURL
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
   888
!
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
   889
10840
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   890
asWideString
14405
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
   891
    "return a two-byte string containing the same characters as the receiver"
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
   892
10840
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   893
    ^ self asTwoByteString
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   894
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   895
    "
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   896
     'abc' asWideString
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   897
    "
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   898
!
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   899
4989
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   900
capitalized
14405
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
   901
    "same as asUppercaseFirst for Squeak compatibility"
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
   902
4989
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   903
    ^ self asUppercaseFirst
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   904
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   905
    "
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   906
     'hello' capitalized
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   907
    "
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   908
!
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   909
10841
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   910
caseInsensitiveLessOrEqual:aString
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   911
    ^ (self compareCaselessWith:aString) <= 0
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   912
!
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   913
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   914
caseSensitiveLessOrEqual:aString
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   915
    ^ self <= aString
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   916
!
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   917
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   918
charactersExactlyMatching:aString
14405
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
   919
    "return the number of characters I share as a prefix with the argument, aString"
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
   920
10841
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   921
    |idx nMax|
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   922
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   923
    nMax :=(self size) min:(aString size).
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   924
    idx := 1.
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   925
    [idx <= nMax] whileTrue:[
14405
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
   926
        (self at:idx) = (aString at:idx) ifFalse:[
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
   927
            ^ idx - 1
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
   928
        ].
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
   929
        idx := idx + 1.
10841
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   930
    ].
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   931
    ^ nMax
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   932
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   933
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
   934
     'abc' charactersExactlyMatching:'abc'
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
   935
     'abc' charactersExactlyMatching:'abcd'
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
   936
     'abcd' charactersExactlyMatching:'abc'
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
   937
     'abc' charactersExactlyMatching:'abd'
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
   938
     'abc' charactersExactlyMatching:'xxx'
10841
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   939
    "
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   940
!
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   941
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   942
endsWithDigit
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   943
    "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
   944
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   945
    ^ self size > 0 and: [self last isDigit]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   946
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   947
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   948
findDelimiters:delimiters startingAt:start
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   949
    "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
   950
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   951
    |idx|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   952
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   953
    idx := self indexOfAny:delimiters startingAt:start.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   954
    idx == 0 ifTrue:[^ self size + 1].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   955
    ^ idx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   956
"/start to: self size do: [:i |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   957
"/        |char|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   958
"/
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   959
"/        char := self at: i.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   960
"/        delimiters do: [:delim | delim = char ifTrue: [^ i]]
8971
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
   961
"/    ].
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
   962
"/    ^ self size + 1
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
   963
!
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
   964
13624
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
   965
findTokens:delimiterOrDelimiters
7270
37248a67718a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7265
diff changeset
   966
    "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
   967
13624
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
   968
    delimiterOrDelimiters size == 0 ifTrue:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   969
	^ self asCollectionOfSubstringsSeparatedBy:delimiterOrDelimiters
13624
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
   970
    ] ifFalse:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   971
	^ self asCollectionOfSubstringsSeparatedByAny:delimiterOrDelimiters
13624
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
   972
    ].
7270
37248a67718a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7265
diff changeset
   973
37248a67718a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7265
diff changeset
   974
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   975
     'a|b#c||e' findTokens:#($# $|)
13624
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
   976
     'a|b#c||e' findTokens:$|
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
   977
    "
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
   978
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
   979
    "Modified: / 04-09-2011 / 20:31:21 / cg"
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
   980
    "Modified (comment): / 05-09-2011 / 04:25:28 / cg"
4981
2ee8cd2c4c8e squeak compatibility
ps
parents: 4974
diff changeset
   981
!
2ee8cd2c4c8e squeak compatibility
ps
parents: 4974
diff changeset
   982
4974
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
   983
includesSubString:aString
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
   984
    "return true, if a substring is contained in the receiver.
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
   985
     The compare is case sensitive."
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
   986
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
   987
    ^ self includesString:aString
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
   988
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
   989
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   990
     'hello world' includesSubString:'Hel'
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   991
     'hello world' includesSubString:'hel'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   992
     'hello world' includesSubString:'llo'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   993
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   994
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   995
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   996
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   997
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   998
11178
668d5d9a4d5d added #includesSubString:caseSensitive:
sr
parents: 11062
diff changeset
   999
includesSubString:aString caseSensitive:caseSensitive
11179
178086a92325 *** empty log message ***
sr
parents: 11178
diff changeset
  1000
    ^ self includesSubstring:aString caseSensitive:caseSensitive
11178
668d5d9a4d5d added #includesSubString:caseSensitive:
sr
parents: 11062
diff changeset
  1001
!
668d5d9a4d5d added #includesSubString:caseSensitive:
sr
parents: 11062
diff changeset
  1002
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1003
includesSubstring:aString caseSensitive:caseSensitive
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1004
    "return true, if a substring is contained in the receiver.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1005
     The argument, caseSensitive controls if case is ignored in the compare."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1006
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1007
    "/ for now,  a q&d hack ...
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1008
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1009
    caseSensitive ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1010
	^ self asLowercase includesString:aString asLowercase
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1011
    ].
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1012
    ^ self includesString:aString
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1013
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1014
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1015
     'hello world' includesSubstring:'Hel' caseSensitive:true
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1016
     'hello world' includesSubstring:'Hel' caseSensitive:false
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
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1019
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1020
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1021
!
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1022
6979
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1023
isAllDigits
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1024
    "Answer whether the receiver's characters are all digits"
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1025
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1026
    ^ self conform:[:eachChar | eachChar isDigit]
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1027
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1028
    "
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1029
     'hello world' isAllDigits
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1030
     '12344' isAllDigits
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1031
    "
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1032
!
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1033
4890
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1034
lastSpacePosition
14405
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  1035
    "return the index of the last space character; 0 if there is none"
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  1036
4890
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1037
    ^ self lastIndexOfSeparator
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1038
!
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1039
7022
0c3c73f83b7f padded:to:with: - for squeak
penk
parents: 7020
diff changeset
  1040
padded:leftOrRight to:paddedSize with:padCharacter
14053
acbb97913c30 comment/format in: #padded:to:with:
Claus Gittinger <cg@exept.de>
parents: 14050
diff changeset
  1041
    "pad left (leftOrRight==#left) or right"
acbb97913c30 comment/format in: #padded:to:with:
Claus Gittinger <cg@exept.de>
parents: 14050
diff changeset
  1042
7022
0c3c73f83b7f padded:to:with: - for squeak
penk
parents: 7020
diff changeset
  1043
    leftOrRight == #left ifTrue:[
14053
acbb97913c30 comment/format in: #padded:to:with:
Claus Gittinger <cg@exept.de>
parents: 14050
diff changeset
  1044
        ^ self leftPaddedTo:paddedSize with:padCharacter
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1045
    ].
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1046
    ^ self paddedTo:paddedSize with:padCharacter
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1047
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1048
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1049
     'hello' padded:#right to:10 with:$.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1050
     'hello' padded:#left to:10 with:$.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1051
    "
14053
acbb97913c30 comment/format in: #padded:to:with:
Claus Gittinger <cg@exept.de>
parents: 14050
diff changeset
  1052
acbb97913c30 comment/format in: #padded:to:with:
Claus Gittinger <cg@exept.de>
parents: 14050
diff changeset
  1053
    "Modified (comment): / 07-03-2012 / 16:31:33 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1054
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1055
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1056
skipDelimiters:delimiters startingAt:start
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1057
    "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
  1058
     that does NOT match one of the delimiters.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1059
     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
  1060
     Assumes the delimiters to be a non-empty string."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1061
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1062
    start to:self size do:[:i |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1063
	delimiters detect:[:delim | delim = (self at:i) ] ifNone:[ ^ i ]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1064
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1065
    ^ self size + 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1066
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1067
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1068
     '123***7890' skipDelimiters:'*' startingAt:4
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1069
     '123***7890' skipDelimiters:'*' startingAt:3
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1070
     '123***7890' skipDelimiters:'*' startingAt:10
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1071
     '123*******' skipDelimiters:'*' startingAt:10
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1072
    "
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1073
!
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1074
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1075
substrings
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1076
    ^ self asCollectionOfWords
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1077
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1078
    "
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1079
     'foo bar baz' substrings
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1080
    "
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1081
!
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1082
12665
b027fc5aec4e added: #substringsSeparatedBy:
Claus Gittinger <cg@exept.de>
parents: 12664
diff changeset
  1083
substringsSeparatedBy:separatorCharacter
b027fc5aec4e added: #substringsSeparatedBy:
Claus Gittinger <cg@exept.de>
parents: 12664
diff changeset
  1084
    ^ self asCollectionOfSubstringsSeparatedBy:separatorCharacter
b027fc5aec4e added: #substringsSeparatedBy:
Claus Gittinger <cg@exept.de>
parents: 12664
diff changeset
  1085
b027fc5aec4e added: #substringsSeparatedBy:
Claus Gittinger <cg@exept.de>
parents: 12664
diff changeset
  1086
    "
b027fc5aec4e added: #substringsSeparatedBy:
Claus Gittinger <cg@exept.de>
parents: 12664
diff changeset
  1087
     'foo bar, baz' substringsSeparatedBy:$,
b027fc5aec4e added: #substringsSeparatedBy:
Claus Gittinger <cg@exept.de>
parents: 12664
diff changeset
  1088
    "
b027fc5aec4e added: #substringsSeparatedBy:
Claus Gittinger <cg@exept.de>
parents: 12664
diff changeset
  1089
!
b027fc5aec4e added: #substringsSeparatedBy:
Claus Gittinger <cg@exept.de>
parents: 12664
diff changeset
  1090
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1091
truncateTo:smallSize
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1092
    "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
  1093
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1094
    self size <= smallSize ifTrue:[^ self].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1095
    ^ self copyFrom: 1 to: smallSize
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1096
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1097
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1098
     'hello world' truncateTo:5
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1099
     'hello' truncateTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1100
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1101
     'hello world' copyTo:5
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1102
     'hello' copyTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1103
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1104
!
5795
d67a8ff4d98e added #truncateTo:
Claus Gittinger <cg@exept.de>
parents: 5794
diff changeset
  1105
4890
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1106
withBlanksTrimmed
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1107
    "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
  1108
14865
8d6cc362aff7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14768
diff changeset
  1109
    ^ self withoutSeparators "withoutSpaces"    "/ cg: it seems that squeak cares for any whitespace
4890
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1110
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1111
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1112
     '  hello    world    ' withBlanksTrimmed
4890
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1113
    "
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1114
!
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1115
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1116
withNoLineLongerThan: aNumber
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1117
    "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
  1118
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1119
    | listOfLines currentLast currentStart resultString putativeLast putativeLine crPosition |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1120
14451
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1121
    (aNumber isNumber not or:[ aNumber < 1] ) ifTrue: [self error: 'too narrow'].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1122
    listOfLines _ OrderedCollection new.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1123
    currentLast _ 0.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1124
    [currentLast < self size] whileTrue:
14451
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1125
            [currentStart _ currentLast + 1.
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1126
            putativeLast _ (currentStart + aNumber - 1) min: self size.
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1127
            putativeLine _ self copyFrom: currentStart to: putativeLast.
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1128
            (crPosition _ putativeLine indexOf: Character cr) > 0 ifTrue:
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1129
                    [putativeLast _ currentStart + crPosition - 1.
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1130
                    putativeLine _ self copyFrom: currentStart to: putativeLast].
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1131
            currentLast _ putativeLast == self size
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1132
                    ifTrue:
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1133
                            [putativeLast]
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1134
                    ifFalse:
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1135
                            [currentStart + putativeLine lastSpacePosition - 1].
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1136
            currentLast <= currentStart ifTrue:
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1137
                    ["line has NO spaces; baleout!!"
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1138
                    currentLast _ putativeLast].
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1139
            listOfLines add: (self copyFrom: currentStart to: currentLast) withBlanksTrimmed].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1140
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1141
    listOfLines size > 0 ifFalse: [^ ''].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1142
    resultString _ listOfLines first.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1143
    2 to: listOfLines size do:
14451
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1144
            [:i | resultString _ resultString, Character cr asString, (listOfLines at: i)].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1145
    ^ resultString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1146
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
     #(5 7 20) collect:
14451
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1149
        [:i | 'Fred the bear went down to the brook to read his book in silence' withNoLineLongerThan: i]
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1150
    "
10883
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1151
!
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1152
12343
0a93eee37d65 added: #withSqueakLineEndings
Claus Gittinger <cg@exept.de>
parents: 12330
diff changeset
  1153
withSqueakLineEndings
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1154
    "assume the string is textual, and that CR, LF, and CRLF are all
12343
0a93eee37d65 added: #withSqueakLineEndings
Claus Gittinger <cg@exept.de>
parents: 12330
diff changeset
  1155
    valid line endings.  Replace each occurence with a single CR"
0a93eee37d65 added: #withSqueakLineEndings
Claus Gittinger <cg@exept.de>
parents: 12330
diff changeset
  1156
0a93eee37d65 added: #withSqueakLineEndings
Claus Gittinger <cg@exept.de>
parents: 12330
diff changeset
  1157
    ^ self asStringCollection asStringWith:Character cr.
0a93eee37d65 added: #withSqueakLineEndings
Claus Gittinger <cg@exept.de>
parents: 12330
diff changeset
  1158
!
0a93eee37d65 added: #withSqueakLineEndings
Claus Gittinger <cg@exept.de>
parents: 12330
diff changeset
  1159
12188
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1160
withoutLeading: char
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1161
    "return a copy of myself without leading a char.
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1162
     Returns an empty string, if the receiver consist only of a char."
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1163
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1164
    ^ self withoutLeadingForWhich:[:ch | ch = char]
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1165
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1166
    "
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1167
     '****foo****' withoutLeading: $*
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1168
     'foo****'     withoutLeading: $*
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1169
     '*'           withoutLeading: $*
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1170
     ''            withoutLeading: $*
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1171
     '****foo'     withoutLeading: $*
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1172
     '*******'     withoutLeading: $*
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1173
     'foo'         withoutLeading: $*
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1174
     'f***o***o'   withoutLeading: $*
12188
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1175
     ('**' , Character tab asString , '*foo***') withoutLeading: $* inspect
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1176
    "
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1177
!
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1178
11565
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1179
withoutTrailing:char
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1180
    "return a copy of myself without trailing char.
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1181
     Returns an empty string, if the receiver consist only of char."
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1182
12188
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1183
    ^ self withoutTrailingForWhich:[:ch | ch = char]
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1184
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1185
    "
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1186
     '    foo....' withoutTrailing:$.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1187
     'foo....'     withoutTrailing:$.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1188
     '    foo'     withoutTrailing:$.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1189
     '.......'     withoutTrailing:$.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1190
     'foo'         withoutTrailing:$.
11565
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1191
    "
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1192
!
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1193
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1194
withoutTrailingBlanks
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1195
    "return a copy of myself without trailing spaces.
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1196
     Notice: this does NOT remove tabs, newline or any other whitespace.
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1197
     Returns an empty string, if the receiver consist only of spaces."
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1198
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1199
    ^ self withoutTrailing:Character space
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1200
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1201
    "
10883
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1202
     '    foo    ' withoutTrailingBlanks
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1203
     'foo    '     withoutTrailingBlanks
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1204
     '    foo'     withoutTrailingBlanks
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1205
     '       '     withoutTrailingBlanks
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1206
     'foo'         withoutTrailingBlanks
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1207
     ('  ' , Character tab asString , ' foo   ') withoutTrailingBlanks inspect
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1208
     ('   foo' , Character tab asString) withoutTrailingBlanks inspect
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1209
    "
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1210
! !
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1211
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1212
!CharacterArray methodsFor:'Compatibility-V''Age'!
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1213
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1214
addLineDelimiter
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1215
    "replace all '\'-characters by line delimiter (cr) - characters.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1216
     This has been added for VisualAge compatibility."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1217
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1218
    ^ self withCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1219
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1220
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1221
bindWith:aString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1222
    "return a copy of the receiver, where a '%1' escape is
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1223
     replaced by aString.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1224
     This has been added for VisualAge compatibility."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1225
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1226
    ^ self expandPlaceholdersWith:(Array with:aString)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1227
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1228
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1229
     'do you like %1 ?' bindWith:'smalltalk'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1230
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1231
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1232
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1233
bindWith:string1 with:string2
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1234
    "return a copy of the receiver, where a '%1' escape is
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1235
     replaced by string1 and '%2' is replaced by string2.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1236
     This has been added for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1237
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1238
    ^ self expandPlaceholdersWith:(Array with:string1 with:string2)
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1239
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1240
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1241
     'do you prefer %1 or rather %2 ?'
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1242
	bindWith:'smalltalk' with:'c++'
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
!
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1245
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1246
bindWith:str1 with:str2 with:str3
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1247
    "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
  1248
     are replaced by str1, str2 and str3 respectively.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1249
     This has been added for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1250
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1251
    ^ self expandPlaceholdersWith:(Array with:str1 with:str2 with:str3)
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1252
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1253
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1254
     'do you prefer %1 or rather %2 (not talking about %3) ?'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1255
	bindWith:'smalltalk' with:'c++' with:'c'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1256
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1257
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1258
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1259
bindWith:str1 with:str2 with:str3 with:str4
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1260
    "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
  1261
     are replaced by str1, str2, str3 and str4 respectively.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1262
     This has been added for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1263
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1264
    ^ self expandPlaceholdersWith:(Array with:str1 with:str2 with:str3 with:str4)
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1265
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1266
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1267
     '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
  1268
	bindWith:'smalltalk' with:'c++' with:'c' with:'assembler'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1269
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1270
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1271
2344
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1272
bindWith:str1 with:str2 with:str3 with:str4 with:str5
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1273
    "return a copy of the receiver, where a '%1' .. '%5' escapes
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1274
     are replaced by str1 .. str5 respectively.
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1275
     This has been added for VisualAge compatibility."
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1276
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1277
    ^ 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
  1278
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1279
    "Created: 31.1.1997 / 16:25:42 / cg"
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1280
!
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1281
5343
bac9bc59a698 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5342
diff changeset
  1282
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
  1283
    "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
  1284
     are replaced by str1 .. str6 respectively.
5343
bac9bc59a698 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5342
diff changeset
  1285
     This has been added for VisualAge compatibility."
bac9bc59a698 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5342
diff changeset
  1286
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1287
    ^ self expandPlaceholdersWith:(Array with:str1 with:str2
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1288
					 with:str3 with:str4
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1289
					 with:str5 with:str6)
11524
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1290
!
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1291
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1292
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
  1293
    "return a copy of the receiver, where a '%1' .. '%7' escapes
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1294
     are replaced by str1 .. str7 respectively.
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1295
     This has been added for VisualAge compatibility."
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1296
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1297
    ^ self expandPlaceholdersWith:(Array with:str1 with:str2
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1298
					 with:str3 with:str4
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1299
					 with:str5 with:str6
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1300
					 with:str7)
5343
bac9bc59a698 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5342
diff changeset
  1301
!
bac9bc59a698 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5342
diff changeset
  1302
13996
a86faa4f17b8 added: #bindWith:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13987
diff changeset
  1303
bindWith:str1 with:str2 with:str3 with:str4 with:str5 with:str6 with:str7 with:str8
a86faa4f17b8 added: #bindWith:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13987
diff changeset
  1304
    "return a copy of the receiver, where a '%1' .. '%8' escapes
a86faa4f17b8 added: #bindWith:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13987
diff changeset
  1305
     are replaced by str1 .. str8 respectively.
a86faa4f17b8 added: #bindWith:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13987
diff changeset
  1306
     This has been added for VisualAge compatibility."
a86faa4f17b8 added: #bindWith:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13987
diff changeset
  1307
a86faa4f17b8 added: #bindWith:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13987
diff changeset
  1308
    ^ self expandPlaceholdersWith:(Array with:str1 with:str2
a86faa4f17b8 added: #bindWith:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13987
diff changeset
  1309
                                         with:str3 with:str4
a86faa4f17b8 added: #bindWith:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13987
diff changeset
  1310
                                         with:str5 with:str6
a86faa4f17b8 added: #bindWith:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13987
diff changeset
  1311
                                         with:str7 with:str8)
a86faa4f17b8 added: #bindWith:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13987
diff changeset
  1312
a86faa4f17b8 added: #bindWith:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13987
diff changeset
  1313
    "Created: / 06-02-2012 / 10:33:18 / cg"
a86faa4f17b8 added: #bindWith:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13987
diff changeset
  1314
!
a86faa4f17b8 added: #bindWith:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13987
diff changeset
  1315
14014
3aff2d7c41c8 added: #bindWith:with:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13996
diff changeset
  1316
bindWith:str1 with:str2 with:str3 with:str4 with:str5 with:str6 with:str7 with:str8 with:str9
3aff2d7c41c8 added: #bindWith:with:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13996
diff changeset
  1317
    "return a copy of the receiver, where a '%1' .. '%9' escapes
3aff2d7c41c8 added: #bindWith:with:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13996
diff changeset
  1318
     are replaced by str1 .. str9 respectively.
3aff2d7c41c8 added: #bindWith:with:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13996
diff changeset
  1319
     This has been added for VisualAge compatibility."
3aff2d7c41c8 added: #bindWith:with:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13996
diff changeset
  1320
3aff2d7c41c8 added: #bindWith:with:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13996
diff changeset
  1321
    ^ self expandPlaceholdersWith:(Array with:str1 with:str2
3aff2d7c41c8 added: #bindWith:with:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13996
diff changeset
  1322
                                         with:str3 with:str4
3aff2d7c41c8 added: #bindWith:with:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13996
diff changeset
  1323
                                         with:str5 with:str6
3aff2d7c41c8 added: #bindWith:with:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13996
diff changeset
  1324
                                         with:str7 with:str8
3aff2d7c41c8 added: #bindWith:with:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13996
diff changeset
  1325
                                         with:str9)
3aff2d7c41c8 added: #bindWith:with:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13996
diff changeset
  1326
3aff2d7c41c8 added: #bindWith:with:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13996
diff changeset
  1327
    "Created: / 14-02-2012 / 17:42:31 / cg"
3aff2d7c41c8 added: #bindWith:with:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13996
diff changeset
  1328
!
3aff2d7c41c8 added: #bindWith:with:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13996
diff changeset
  1329
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1330
bindWithArguments:anArrayOfStrings
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1331
    "return a copy of the receiver, where a '%i' escape
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1332
     is replaced by the coresponding string from the argument array.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1333
     '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
  1334
     This has been added for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1335
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1336
    ^ self expandPlaceholdersWith:anArrayOfStrings
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1337
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1338
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1339
     'do you prefer %1 or rather %2 (not talking about %3) ?'
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1340
	bindWithArguments:#('smalltalk' 'c++' 'c')
12196
5718ecf81f37 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 12188
diff changeset
  1341
5718ecf81f37 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 12188
diff changeset
  1342
     'do you %(what) ?'
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1343
	bindWithArguments:(Dictionary new at:#'what' put:'understand'; yourself)
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1344
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1345
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1346
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1347
subStrings
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1348
    "return an array consisting of all words contained in the receiver.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1349
     Words are separated by whitespace.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1350
     This has been added for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1351
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1352
    ^ self asCollectionOfWords
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1353
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1354
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1355
     'hello world, this is smalltalk' subStrings
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1356
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1357
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1358
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1359
subStrings:separatorCharacter
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1360
    "return an array consisting of all words contained in the receiver.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1361
     Words are separated by separatorCharacter.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1362
     This has been added for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1363
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1364
    ^ self asCollectionOfSubstringsSeparatedBy:separatorCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1365
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1366
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1367
     'foo:bar:baz:smalltalk' subStrings:$:
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1368
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1369
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1370
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1371
trimSeparators
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1372
    "return a copy of the receiver without leading and trailing whiteSpace"
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
    ^ self withoutSeparators
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1375
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1376
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1377
!CharacterArray methodsFor:'Compatibility-VW'!
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1378
6139
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1379
asLogicalFileSpecification
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1380
    ^ self asFilename
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1381
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1382
    "Created: / 30.10.2001 / 17:29:53 / cg"
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1383
!
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1384
6119
b6cee2c2b2ea +asQualifiedReference
Claus Gittinger <cg@exept.de>
parents: 5964
diff changeset
  1385
asQualifiedReference
b6cee2c2b2ea +asQualifiedReference
Claus Gittinger <cg@exept.de>
parents: 5964
diff changeset
  1386
    ^ BindingReference pathString:(self string)
b6cee2c2b2ea +asQualifiedReference
Claus Gittinger <cg@exept.de>
parents: 5964
diff changeset
  1387
b6cee2c2b2ea +asQualifiedReference
Claus Gittinger <cg@exept.de>
parents: 5964
diff changeset
  1388
!
b6cee2c2b2ea +asQualifiedReference
Claus Gittinger <cg@exept.de>
parents: 5964
diff changeset
  1389
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1390
expandMacros
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1391
    "ST80 compatibility - expand '<..>' macros with
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1392
     argument strings. Similar to #bindWith:.
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1393
     Read the comment in #expandMacrosWithArguments: about
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1394
     limited compatibility issues."
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1395
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1396
    ^ self expandMacrosWithArguments:#()
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1397
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1398
    "
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1399
     'hello<n>foo' expandMacros
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1400
    "
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1401
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1402
    "Modified: / 18.6.1998 / 16:03:02 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1403
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1404
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1405
expandMacrosWith:arg
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1406
    "ST80 compatibility - expand '<..>' macros with
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1407
     argument strings. Similar to #bindWith:.
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1408
     Read the comment in #expandMacrosWithArguments: about
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1409
     limited compatibility issues."
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1410
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1411
    ^ self expandMacrosWithArguments:(Array with:arg)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1412
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1413
    "Created: / 1.11.1997 / 13:01:28 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1414
    "Modified: / 1.11.1997 / 13:30:50 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1415
!
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1416
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1417
expandMacrosWith:arg1 with:arg2
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1418
    "ST80 compatibility - expand '<..>' macros with
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1419
     argument strings. Similar to #bindWith:.
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1420
     Read the comment in #expandMacrosWithArguments: about
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1421
     limited compatibility issues."
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1422
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1423
    ^ self expandMacrosWithArguments:(Array with:arg1 with:arg2)
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1424
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1425
    "Modified: / 6.7.1998 / 21:58:14 / cg"
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1426
!
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1427
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1428
expandMacrosWith:arg1 with:arg2 with:arg3
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1429
    "ST80 compatibility - expand '<..>' macros with
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1430
     argument strings. Similar to #bindWith:.
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1431
     Read the comment in #expandMacrosWithArguments: about
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1432
     limited compatibility issues."
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1433
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1434
    ^ self expandMacrosWithArguments:(Array with:arg1 with:arg2 with:arg3)
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1435
!
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1436
10353
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1437
expandMacrosWith:arg1 with:arg2 with:arg3 with:arg4
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1438
    "ST80 compatibility - expand '<..>' macros with
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1439
     argument strings. Similar to #bindWith:.
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1440
     Read the comment in #expandMacrosWithArguments: about
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1441
     limited compatibility issues."
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1442
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1443
    ^ 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
  1444
!
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1445
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1446
expandMacrosWithArguments:argArray
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1447
    "ST80 compatibility - expand '<..>' macros with
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1448
     argument strings. Similar to #bindWith:.
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1449
     WARNING: possibly not all ST80 expansions are supported here."
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1450
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1451
    "/ supported expansions:
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1452
    "/
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1453
    "/   <#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
  1454
    "/   <#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
  1455
    "/   <#?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
  1456
    "/              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
  1457
    "/   <n>        replace by a newLine character
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1458
    "/   <t>        replace by a tab character
6834
eba4b58b8692 fixed expandMacros (%-escape)
Claus Gittinger <cg@exept.de>
parents: 6810
diff changeset
  1459
    "/   %X         the X character itself
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1460
8999
f3fda66ea51e #expandMacrosWithArguments: - be mor friendly to xml strings.
Stefan Vogel <sv@exept.de>
parents: 8971
diff changeset
  1461
    |in out c fmt nr arg s1 s2 peekc|
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1462
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1463
    in := self readStream.
10721
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1464
    out := CharacterWriteStream on:(self species uninitializedNew:self size).
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1465
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1466
    [in atEnd] whileFalse:[
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1467
	c := in next.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1468
	c == $% ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1469
	    c := in next.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1470
	    out nextPut:c
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1471
	] ifFalse:[c ~~ $< ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1472
	    out nextPut:c.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1473
	] ifFalse:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1474
	    peekc := in peek.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1475
	    [peekc == $<] whileTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1476
		out nextPut:$<.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1477
		peekc := in nextPeek.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1478
	    ].
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1479
	    peekc == $n ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1480
		peekc := in nextPeek.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1481
		peekc == $> ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1482
		    in next.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1483
		    out cr.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1484
		] ifFalse:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1485
		    out nextPutAll:'<n'.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1486
		]
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1487
	    ] ifFalse:[peekc == $t ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1488
		peekc := in nextPeek.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1489
		peekc == $> ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1490
		    in next.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1491
		    out tab.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1492
		] ifFalse:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1493
		    out nextPutAll:'<t'.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1494
		]
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1495
	    ] ifFalse:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1496
		peekc isDigit ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1497
		    "start an argument expansion ..."
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1498
		    nr := Integer readFrom:in onError:nil.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1499
		    nr isNil ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1500
			"this cannot happen (there is at least one digit)"
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1501
			self error:'invalid format' mayProceed:true.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1502
			^ self
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1503
		    ].
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1504
		    fmt := in next.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1505
		    (fmt ~~ $? and:[in peek ~~ $>]) ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1506
			out nextPut:$<.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1507
			nr printOn:out.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1508
			out nextPut:fmt.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1509
		    ] ifFalse:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1510
			(nr between:1 and:argArray size) ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1511
			    arg := argArray at:nr.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1512
			] ifFalse:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1513
			    arg := ''
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1514
			].
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1515
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1516
			fmt == $p ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1517
			    "expand with args printString"
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1518
			    arg printOn:out.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1519
			] ifFalse:[fmt == $s ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1520
			    "expand with arg itself"
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1521
			    arg isText ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1522
				out contentsSpecies isText ifFalse:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1523
				    out := (WriteStream on:Text new) nextPutAll:out contents; yourself.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1524
				].
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1525
				out nextPutAll:arg.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1526
			    ] ifFalse:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1527
				out nextPutAll:arg "asString" string.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1528
			    ]
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1529
			] ifFalse:[fmt == $? ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1530
			    s1 := in upTo:$:.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1531
			    s2 := in nextUpTo:$>.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1532
			    arg == true ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1533
				out nextPutAll:s1
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1534
			    ] ifFalse:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1535
				out nextPutAll:s2
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1536
			    ].
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1537
			] ifFalse:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1538
			    "what does VW do here ?"
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1539
			    self error:'invalid format' mayProceed:true.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1540
			    ^ self
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1541
			]]].
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1542
			c := in next.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1543
			c ~~ $> ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1544
			    "what does VW do here ?"
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1545
			    self error:'invalid format' mayProceed:true.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1546
			    ^ self
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1547
			]
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1548
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1549
		    ].
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1550
		] ifFalse:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1551
		    out nextPut:$<.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1552
		].
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1553
	    ]].
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1554
	]].
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1555
    ].
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1556
    ^ out contents
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1557
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1558
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1559
     'hello <1s> how are you' expandMacrosWith:(OperatingSystem getLoginName)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1560
     'one plus one is <1p>' expandMacrosWith:2
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1561
    "
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1562
10721
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1563
    "Modified: / 18-09-2007 / 22:50:43 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1564
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1565
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1566
isCharacters
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1567
    "added for visual works compatibility"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1568
    ^ true
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1569
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1570
13510
150d12670b9f comment/format
Claus Gittinger <cg@exept.de>
parents: 13504
diff changeset
  1571
15035
ecbb70df7a5c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14993
diff changeset
  1572
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1573
!CharacterArray methodsFor:'character searching'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1574
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1575
includesMatchCharacters
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  1576
    "return true if the receiver includes any GLOB meta-match characters (i.e. $* or $#)
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1577
     for match operations; false if not.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1578
     Here, do not care for $\ escapes"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1579
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1580
    ^ self includesAny:'*#['
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1581
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1582
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1583
     '*foo' includesMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1584
     '\*foo' includesMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1585
     '\*foo' includesUnescapedMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1586
     '*foo' includesMatchCharacters
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1587
     '\\*foo' includesMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1588
     'foo*' includesMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1589
     'foo\*' includesMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1590
     'foo\' includesMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1591
    "
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1592
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1593
    "Modified: 2.4.1997 / 18:12:34 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1594
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1595
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1596
includesSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1597
    "return true, if the receiver contains any whitespace characters"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1598
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1599
    ^ (self indexOfSeparator ~~ 0)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1600
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1601
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1602
     'hello world' includesSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1603
     'helloworld' includesSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1604
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1605
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1606
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1607
includesUnescapedMatchCharacters
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1608
    "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
  1609
     for match operations; false if not.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1610
     Here, care for $\ escapes"
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1611
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  1612
    |idx sz specialChars escape|
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1613
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1614
    idx := 1.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1615
    sz := self size.
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  1616
    specialChars := '*#[\'.
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  1617
    (escape := self class matchEscapeCharacter) ~~ $\ ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1618
	specialChars := specialChars copy.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1619
	specialChars at:specialChars size put:escape
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  1620
    ].
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  1621
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1622
    [true] whileTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1623
	idx := self indexOfAny:specialChars startingAt:idx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1624
	idx == 0 ifTrue:[^ false].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1625
	(self at:idx) == escape ifFalse:[^ true].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1626
	idx := idx + 2.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1627
	idx > sz ifTrue:[^ false].
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1628
    ].
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1629
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1630
    "
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1631
     '*foo' includesUnescapedMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1632
     '\*foo' includesUnescapedMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1633
     '\\foo' includesUnescapedMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1634
     '\\\$foo' includesUnescapedMatchCharacters
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1635
     '*foo' includesUnescapedMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1636
     '\\*foo' includesUnescapedMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1637
     'foo*' includesUnescapedMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1638
     'foo\*' includesUnescapedMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1639
     'foo\' includesUnescapedMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1640
    "
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1641
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1642
    "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
  1643
    "Created: 2.4.1997 / 17:23:26 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1644
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1645
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1646
indexOfControlCharacterStartingAt:startIndex
3668
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1647
    "return the index of the next control character;
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1648
     starting the search at startIndex, searching forward;
3668
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1649
     that is a character with asciiValue < 32.
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1650
     Return 0 if none is found."
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1651
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1652
    |start  "{ Class: SmallInteger }"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1653
     mySize "{ Class: SmallInteger }"|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1654
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1655
    start := startIndex.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1656
    mySize := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1657
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1658
    start to:mySize do:[:index |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1659
	(self at:index) isControlCharacter ifTrue:[^ index]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1660
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1661
    ^ 0
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1662
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1663
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1664
     'hello world' asTwoByteString            indexOfControlCharacterStartingAt:1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1665
     'hello world\foo' withCRsasTwoByteString indexOfControlCharacterStartingAt:1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1666
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1667
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1668
    "Modified: / 21.7.1998 / 17:25:07 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1669
!
3668
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1670
8541
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1671
indexOfNonSeparator
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1672
    "return the index of the first non-whitespace character.
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1673
     return 0 if no non-separator was found"
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1674
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1675
    ^ self indexOfNonSeparatorStartingAt:1.
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1676
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1677
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1678
     '    hello world' indexOfNonSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1679
     '    ' indexOfNonSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1680
     'a   ' indexOfNonSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1681
     'abc' indexOfNonSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1682
     ' ' indexOfNonSeparator
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1683
     '' indexOfNonSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1684
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1685
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1686
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1687
indexOfNonSeparatorStartingAt:startIndex
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1688
    "return the index of the next non-whitespace character,
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1689
     starting the search at startIndex, searching forward;
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1690
     return 0 if no non-separator was found"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1691
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1692
    |start  "{ Class: SmallInteger }"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1693
     mySize "{ Class: SmallInteger }"|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1694
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1695
    start := startIndex.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1696
    mySize := self size.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1697
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1698
    start to:mySize do:[:index |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1699
	(self at:index) isSeparator ifFalse:[^ index]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1700
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1701
    ^ 0
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1702
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1703
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1704
     '    hello world' indexOfNonSeparatorStartingAt:1
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1705
     '    ' indexOfNonSeparatorStartingAt:1
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1706
     'a   ' indexOfNonSeparatorStartingAt:2
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1707
    "
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1708
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1709
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1710
     |s index1 index2|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1711
     s := '   foo    bar      baz'.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1712
     index1 := s indexOfNonSeparatorStartingAt:1.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1713
     index2 := s indexOfSeparatorStartingAt:index1.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1714
     s copyFrom:index1 to:index2 - 1
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1715
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1716
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1717
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1718
indexOfSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1719
    "return the index of the first whitespace character;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1720
     starting the search at the beginning, searching forward;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1721
     return 0 if no separator was found"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1722
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1723
    ^ self indexOfSeparatorStartingAt:1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1724
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1725
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1726
     'hello world' indexOfSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1727
     'helloworld' indexOfSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1728
     'hello   ' indexOfSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1729
     '   hello' indexOfSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1730
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1731
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1732
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1733
indexOfSeparatorStartingAt:startIndex
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1734
    "return the index of the next whitespace character,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1735
     starting the search at startIndex, searching forward;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1736
     return 0 if no separator was found"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1737
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1738
    |start  "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1739
     mySize "{ Class: SmallInteger }"|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1740
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1741
    start := startIndex.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1742
    mySize := self size.
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
    start to:mySize do:[:index |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1745
	(self at:index) isSeparator ifTrue:[^ index]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1746
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1747
    ^ 0
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1748
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1749
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1750
     'hello world' indexOfSeparatorStartingAt:3
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1751
     ' hello world' indexOfSeparatorStartingAt:3
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1752
     'hello world ' indexOfSeparatorStartingAt:3
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1753
     'hello world ' indexOfSeparatorStartingAt:6
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1754
     'hello world ' indexOfSeparatorStartingAt:7
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1755
     'helloworld ' indexOfSeparatorStartingAt:7
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1756
     'helloworld' indexOfSeparatorStartingAt:7
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1757
    "
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1758
!
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1759
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1760
lastIndexOfSeparator
14150
e13160aa321a comment/format in: #lastIndexOfSeparator
Claus Gittinger <cg@exept.de>
parents: 14141
diff changeset
  1761
    "return the last index of a whitespace character (space or tab).
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1762
     (i.e. start the search at the end and search backwards);
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1763
     Returns 0 if no separator is found."
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1764
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1765
    ^ self lastIndexOfSeparatorStartingAt:(self size)
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1766
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1767
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1768
     'hello world' lastIndexOfSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1769
     'helloworld' lastIndexOfSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1770
     'hel lo wor ld' lastIndexOfSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1771
     'hel   ' lastIndexOfSeparator 6
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1772
    "
14150
e13160aa321a comment/format in: #lastIndexOfSeparator
Claus Gittinger <cg@exept.de>
parents: 14141
diff changeset
  1773
e13160aa321a comment/format in: #lastIndexOfSeparator
Claus Gittinger <cg@exept.de>
parents: 14141
diff changeset
  1774
    "Modified (comment): / 01-06-2012 / 13:10:30 / cg"
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1775
!
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1776
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1777
lastIndexOfSeparatorStartingAt:startIndex
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1778
    "return the index of the previous whitespace character,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1779
     starting the search at startIndex (and searching backwards);
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1780
     returns 0 if no separator was found"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1781
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1782
    |start  "{ Class: SmallInteger }"|
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
    start := startIndex.
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
    start to:1 by:-1 do:[:index |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1787
	(self at:index) isSeparator ifTrue:[^ index]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1788
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1789
    ^ 0
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1790
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1791
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1792
     'hello world' lastIndexOfSeparatorStartingAt:3
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1793
     'hello world' lastIndexOfSeparatorStartingAt:7
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1794
     'helloworld' lastIndexOfSeparatorStartingAt:7
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1795
     ' helloworld' lastIndexOfSeparatorStartingAt:7
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1796
    "
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1797
! !
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1798
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1799
!CharacterArray methodsFor:'comparing'!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1800
6742
292775fda600 avoid endless recursion when comparing int < string
Claus Gittinger <cg@exept.de>
parents: 6655
diff changeset
  1801
< aString
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1802
    "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
  1803
     receiver is greater than the argument. Otherwise return false.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1804
     This comparison is based on the elements ascii code -
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1805
     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
  1806
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1807
    |mySize    "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1808
     otherSize "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1809
     n         "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1810
     c1 c2|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1811
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1812
    mySize := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1813
    otherSize := aString string size.
6742
292775fda600 avoid endless recursion when comparing int < string
Claus Gittinger <cg@exept.de>
parents: 6655
diff changeset
  1814
    n := mySize min:otherSize.
292775fda600 avoid endless recursion when comparing int < string
Claus Gittinger <cg@exept.de>
parents: 6655
diff changeset
  1815
292775fda600 avoid endless recursion when comparing int < string
Claus Gittinger <cg@exept.de>
parents: 6655
diff changeset
  1816
    1 to:n do:[:index |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1817
	c1 := self at:index.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1818
	c2 := aString at:index.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1819
	(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
  1820
    ].
292775fda600 avoid endless recursion when comparing int < string
Claus Gittinger <cg@exept.de>
parents: 6655
diff changeset
  1821
    ^ mySize < otherSize
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1822
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1823
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1824
= aString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1825
    "Compare the receiver with the argument and return true if the
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1826
     receiver is equal to the argument. Otherwise return false.
1252
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  1827
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  1828
     This compare does NOT ignore case differences,
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1829
     therefore 'foo' = 'Foo' will return false.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1830
     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
  1831
14137
1eb1b4a3f364 Inherit from UninterpretedBytes instead of ByteArray
Stefan Vogel <sv@exept.de>
parents: 14122
diff changeset
  1832
    |mySize    "{ Class: SmallInteger }"|
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1833
5963
23462e06dcff compare with Texts fixed (should compare equal if strings are)
Claus Gittinger <cg@exept.de>
parents: 5946
diff changeset
  1834
    (aString isString or:[aString species == self species]) ifFalse:[
14137
1eb1b4a3f364 Inherit from UninterpretedBytes instead of ByteArray
Stefan Vogel <sv@exept.de>
parents: 14122
diff changeset
  1835
        ^ false
5963
23462e06dcff compare with Texts fixed (should compare equal if strings are)
Claus Gittinger <cg@exept.de>
parents: 5946
diff changeset
  1836
    ].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1837
    mySize := self size.
14137
1eb1b4a3f364 Inherit from UninterpretedBytes instead of ByteArray
Stefan Vogel <sv@exept.de>
parents: 14122
diff changeset
  1838
    mySize ~~ (aString size) ifTrue:[^ false].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1839
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1840
    1 to:mySize do:[:index |
14137
1eb1b4a3f364 Inherit from UninterpretedBytes instead of ByteArray
Stefan Vogel <sv@exept.de>
parents: 14122
diff changeset
  1841
        (self at:index) = (aString at:index) ifFalse:[^ false].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1842
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1843
    ^ true
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1844
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1845
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1846
     'foo' = 'Foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1847
     'foo' = 'bar'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1848
     'foo' = 'foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1849
     'foo' = 'foo' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1850
     'foo' asText = 'foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1851
     'foo' asText = 'foo' asText
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1852
    "
1252
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  1853
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  1854
    "Modified: 22.4.1996 / 15:53:58 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1855
!
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1856
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  1857
> aString
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1858
    "Compare the receiver with the argument and return true if the
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1859
     receiver is greater than the argument. Otherwise return false.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1860
     This comparison is based on the elements ascii code -
1252
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  1861
     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
  1862
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1863
    |mySize    "{ Class: SmallInteger }"
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1864
     otherSize "{ Class: SmallInteger }"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1865
     n         "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1866
     c1 c2|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1867
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1868
    mySize := self size.
5929
a3d2e7aaa3a3 added #compareCaselessWith:
Claus Gittinger <cg@exept.de>
parents: 5898
diff changeset
  1869
    otherSize := aString string size.
a3d2e7aaa3a3 added #compareCaselessWith:
Claus Gittinger <cg@exept.de>
parents: 5898
diff changeset
  1870
    n := mySize min:otherSize.
a3d2e7aaa3a3 added #compareCaselessWith:
Claus Gittinger <cg@exept.de>
parents: 5898
diff changeset
  1871
a3d2e7aaa3a3 added #compareCaselessWith:
Claus Gittinger <cg@exept.de>
parents: 5898
diff changeset
  1872
    1 to:n do:[:index |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1873
	c1 := self at:index.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1874
	c2 := aString at:index.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1875
	(c1 == c2 or:[c1 = c2]) ifFalse:[^ c1 > c2].
5929
a3d2e7aaa3a3 added #compareCaselessWith:
Claus Gittinger <cg@exept.de>
parents: 5898
diff changeset
  1876
    ].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1877
    ^ mySize > otherSize
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
    "Modified: 22.4.1996 / 15:55:00 / cg"
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
14660
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1882
after:aString
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1883
    "Compare the receiver with the argument and return true if the
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1884
     receiver should come after the argument in a sorted list.
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1885
     Otherwise return false.
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1886
     NOTE: The comparison should be language specific, depending on the value of
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1887
            LC_COLLATE, which is initialized from the environment.
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1888
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1889
            Currently it is for Strings, but not for UnicodeStrings...
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1890
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1891
     STUPID:
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1892
        #after has a completely different meaning in SeqColl ..."
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1893
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1894
    ^ (self compareCollatingWith:aString) > 0
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1895
!
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1896
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1897
compareCaselessWith:aString
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1898
    "Compare the receiver against the argument, ignoreing case.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1899
     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
  1900
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1901
     This comparison is based on the elements ascii code -
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1902
     i.e. national characters are NOT treated specially.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1903
     'foo' compareWith: 'Foo' will return 0"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1904
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1905
    |mySize    "{ Class: SmallInteger }"
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1906
     otherSize "{ Class: SmallInteger }"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1907
     n         "{ Class: SmallInteger }"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1908
     c1 c2|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1909
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1910
    mySize := self size.
5739
4fd3be7ccc75 oops some relational ops did accept a non-string arg
Claus Gittinger <cg@exept.de>
parents: 5732
diff changeset
  1911
    otherSize := aString string size.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1912
    n := mySize min:otherSize.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1913
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1914
    1 to:n do:[:index |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1915
	c1 := (self at:index) asLowercase.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1916
	c2 := (aString at:index) asLowercase.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1917
	c1 > c2 ifTrue:[^ 1].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1918
	c1 < c2 ifTrue:[^ -1].
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
    mySize > otherSize ifTrue:[^ 1].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1921
    mySize < otherSize ifTrue:[^ -1].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1922
    ^ 0
1252
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  1923
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  1924
    "Modified: 22.4.1996 / 15:56:07 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1925
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1926
14660
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1927
compareCollatingWith:aString
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1928
    "Compare the receiver with the argument and return 1 if the receiver is
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1929
     greater, 0 if equal and -1 if less than the argument in a sorted list.
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1930
     The comparison is language specific, depending on the value of
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1931
     LC_COLLATE, which is in the shell environment."
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1932
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1933
    "TODO not yet defined for unicode"
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1934
    <resource: #todo>
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1935
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1936
    |s|
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1937
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1938
    (s := self string) ~~ self ifTrue:[
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1939
        ^ s compareCollatingWith:aString
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1940
    ].
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1941
    ^ self compareWith:aString
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1942
!
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1943
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1944
compareWith:aString
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1945
    "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
  1946
     greater, 0 if equal and -1 if less than the argument.
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  1947
     This comparison is based on the elements' codepoints -
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1948
     i.e. upper/lowercase & national characters are NOT treated specially.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1949
     'foo' compareWith: 'Foo' will return 1.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1950
     while 'foo' sameAs:'Foo' will return true"
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1951
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1952
    |mySize    "{ Class: SmallInteger }"
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1953
     otherSize "{ Class: SmallInteger }"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1954
     n         "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1955
     c1 c2|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1956
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1957
    mySize := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1958
    otherSize := aString string size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1959
    n := mySize min:otherSize.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1960
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1961
    1 to:n do:[:index |
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1962
	c1 := self at:index.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1963
	c2 := aString at:index.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1964
	c1 > c2 ifTrue:[^ 1].
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1965
	c1 < c2 ifTrue:[^ -1].
9192
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 > otherSize ifTrue:[^ 1].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1968
    mySize < otherSize ifTrue:[^ -1].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1969
    ^ 0
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1970
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1971
    "Modified: 22.4.1996 / 15:56:07 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1972
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1973
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  1974
endsWith:aStringOrCharacter
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  1975
    "return true, if the receiver ends with something, aStringOrCharacter."
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  1976
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  1977
    |s|
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  1978
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  1979
    (s := self string) ~~ self ifTrue:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1980
	^ s endsWith:aStringOrCharacter
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  1981
    ].
12912
d12e31b830f5 changed: #endsWith:
Claus Gittinger <cg@exept.de>
parents: 12767
diff changeset
  1982
    (self notEmpty and:[aStringOrCharacter isCharacter]) ifTrue:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1983
	^ self last = aStringOrCharacter
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  1984
    ].
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  1985
    ^ super endsWith:aStringOrCharacter
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  1986
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  1987
    "
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  1988
     'hello world' endsWith:'world'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  1989
     'hello world' asText allBold endsWith:'world'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  1990
    "
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  1991
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  1992
    "Modified: 12.5.1996 / 15:49:18 / cg"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  1993
!
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  1994
11838
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  1995
hammingDistanceTo:aString
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  1996
    "return the hamming distance (the number of characters which are different).
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1997
     In information theory, the Hamming distance between two strings of equal length
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1998
     is the number of positions for which the corresponding symbols are different.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1999
     Put another way, it measures the minimum number of substitutions required to change
11838
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  2000
     one into the other, or the number of errors that transformed one string into the other."
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  2001
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  2002
    self assert:(aString size == self size).
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  2003
    ^ 1 to:self size count:[:idx | (self at:idx) ~= (aString at:idx)]
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  2004
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  2005
    "
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  2006
     'roses' hammingDistanceTo:'toned'
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  2007
    "
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  2008
!
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  2009
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2010
hash
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2011
    "return an integer useful as a hash-key"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2012
13879
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2013
    "/ immediately after any change, execute (maybe in a debugger):
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2014
    "/      Set allSubInstancesDo:[:s | s rehash]
14641
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2015
    "/ ^ self hash_dragonBook
14652
3da893944c41 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14641
diff changeset
  2016
3da893944c41 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14641
diff changeset
  2017
    |h|
3da893944c41 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14641
diff changeset
  2018
3da893944c41 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14641
diff changeset
  2019
    "/
3da893944c41 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14641
diff changeset
  2020
    "/ this is the sdbm algorithm
3da893944c41 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14641
diff changeset
  2021
    "/
3da893944c41 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14641
diff changeset
  2022
    h := 0.
3da893944c41 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14641
diff changeset
  2023
    self do:[:char |
3da893944c41 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14641
diff changeset
  2024
        h := (65599 times:h) plus:char codePoint.
3da893944c41 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14641
diff changeset
  2025
    ].
3da893944c41 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14641
diff changeset
  2026
    ^ h 
13879
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2027
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2028
    "
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2029
     'a' hash
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2030
     'a' asUnicode16String hash
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2031
     'aa' hash
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2032
     'aa' asUnicode16String hash
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2033
     'ab' hash
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2034
     'ab' asUnicode16String hash
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2035
     'ab' hash
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2036
     'ab' asArray hash
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2037
    "
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2038
14641
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2039
    "
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2040
        |syms ms|
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2041
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2042
        syms := Symbol allInstances.
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2043
        Transcript show:'syms: '; showCR:syms size.
14652
3da893944c41 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14641
diff changeset
  2044
        Transcript show:'sdbm hashes: '; showCR:(syms collect:[:s| s hash]) asSet size.
14641
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2045
        Transcript show:'dragonBook hashes: '; showCR:(syms collect:[:s| s hash_dragonBook]) asSet size.
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2046
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2047
        ms := Time millisecondsToRun:[
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2048
            10 timesRepeat:[
14652
3da893944c41 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14641
diff changeset
  2049
                syms do:[:each| each hash].
14641
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2050
            ].
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2051
        ].
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2052
        Transcript show:'sdbm hash: '; showCR:ms.
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2053
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2054
        ms := Time millisecondsToRun:[
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2055
            10 timesRepeat:[
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2056
                syms do:[:each| each hash_dragonBook].
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2057
            ].
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2058
        ].
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2059
        Transcript show:'dragonBook: '; showCR:ms.
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2060
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2061
        syms := syms collect:[:each| each asUnicode16String].
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2062
        ms := Time millisecondsToRun:[
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2063
            10 timesRepeat:[
14652
3da893944c41 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14641
diff changeset
  2064
                syms do:[:each| each hash].
14641
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2065
            ].
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2066
        ].
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2067
        Transcript show:'unicode sdbm hash: '; showCR:ms.
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2068
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2069
        ms := Time millisecondsToRun:[
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2070
            10 timesRepeat:[
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2071
                syms do:[:each| each hash_dragonBook].
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2072
            ].
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2073
        ].
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2074
        Transcript show:'unicode dragonBook:'; showCR:ms.
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2075
    "
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2076
13879
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2077
    "Modified: / 26-12-2011 / 14:09:07 / cg"
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2078
!
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2079
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2080
hash_dragonBook
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2081
    "return an integer useful as a hash-key"
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2082
10698
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2083
    |h g|
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2084
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2085
    "/
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2086
    "/ this is the dragon-book algorithm
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2087
    "/
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2088
    h := 0.
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2089
    self reverseDo:[:char |
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2090
"/ 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
  2091
"/        h := (h bitShift:4) + char asciiValue.
14137
1eb1b4a3f364 Inherit from UninterpretedBytes instead of ByteArray
Stefan Vogel <sv@exept.de>
parents: 14122
diff changeset
  2092
        h := (h bitShift:4).
14637
9ba33c37bdd6 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14631
diff changeset
  2093
        h := h + char codePoint.
14137
1eb1b4a3f364 Inherit from UninterpretedBytes instead of ByteArray
Stefan Vogel <sv@exept.de>
parents: 14122
diff changeset
  2094
        h := h bitAnd:16rFFFFFFFF.
1eb1b4a3f364 Inherit from UninterpretedBytes instead of ByteArray
Stefan Vogel <sv@exept.de>
parents: 14122
diff changeset
  2095
        g := (h bitAnd: 16rF0000000).
1eb1b4a3f364 Inherit from UninterpretedBytes instead of ByteArray
Stefan Vogel <sv@exept.de>
parents: 14122
diff changeset
  2096
        g ~~ 0 ifTrue:[
1eb1b4a3f364 Inherit from UninterpretedBytes instead of ByteArray
Stefan Vogel <sv@exept.de>
parents: 14122
diff changeset
  2097
            h := h bitXor:(g bitShift:-24).
1eb1b4a3f364 Inherit from UninterpretedBytes instead of ByteArray
Stefan Vogel <sv@exept.de>
parents: 14122
diff changeset
  2098
            h := h bitXor:g.
1eb1b4a3f364 Inherit from UninterpretedBytes instead of ByteArray
Stefan Vogel <sv@exept.de>
parents: 14122
diff changeset
  2099
        ].
10698
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2100
    ].
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2101
    "/
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2102
    "/ multiply by large prime to spread values
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2103
    "/ This speeds up Set and Dictionary by a factor of 10!!
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2104
    "/
14137
1eb1b4a3f364 Inherit from UninterpretedBytes instead of ByteArray
Stefan Vogel <sv@exept.de>
parents: 14122
diff changeset
  2105
    h := h times:31415821.
10698
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2106
    ^ h
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2107
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2108
    "
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2109
     'a' hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2110
     'a' asUnicode16String hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2111
     'aa' hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2112
     'aa' asUnicode16String hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2113
     'ab' hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2114
     'ab' asUnicode16String hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2115
     'ab' hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2116
     'ab' asArray hash
10698
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2117
    "
13879
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2118
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2119
    "Created: / 26-12-2011 / 13:46:06 / cg"
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2120
!
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2121
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2122
levenshteinTo:aString
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2123
    "return the levenshtein distance to the argument, aString;
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2124
     this value corresponds to the number of replacements that have to be
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2125
     made to get aString from the receiver.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2126
     See IEEE transactions on Computers 1976 Pg 172 ff."
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2127
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2128
    "
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2129
     in the following, we assume that ommiting a character
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2130
     is less of an error than inserting an extra character.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2131
     Therefore the different insertion (i) and deletion (d) values.
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2132
	s: substitution weight
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2133
	k: keyboard weight (typing a nearby key) - or nil (then use s)
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2134
	c: case weight                           - or nil (then use s)
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2135
	e: exchange weight                       - or nil (then use s*2)
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2136
	i: insertion of extra character weight
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2137
	d: delete of a character weight
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2138
    "
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2139
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2140
    ^ StringUtilities
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2141
	    levenshteinDistanceFrom:self
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2142
	    to:aString
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2143
	    s:4 k:4 c:4 e:nil i:2 d:6
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2144
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2145
    "
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2146
     'computer' levenshteinTo:'computer'
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2147
     'cOmputer' levenshteinTo:'computer'
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2148
     'cOmpuTer' levenshteinTo:'computer'
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2149
     'cimputer' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2150
     'cumputer' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2151
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2152
     'cmputer' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2153
     'coomputer' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2154
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2155
     'ocmprt' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2156
     'computer' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2157
     'ocmputer' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2158
     'cmputer' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2159
     'computer' levenshteinTo:'cmputer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2160
     'Computer' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2161
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2162
     'compiter' levenshteinTo:'computer'
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2163
     'compoter' levenshteinTo:'computer'
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2164
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2165
     'comptuer' levenshteinTo:'computer'
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2166
    "
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2167
!
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2168
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2169
levenshteinTo:aString s:substWeight k:kbdTypoWeight c:caseWeight i:insrtWeight d:deleteWeight
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2170
    "parametrized levenshtein.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2171
     return the levenshtein distance to the argument, aString;
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2172
     this value corrensponds to the number of replacements that have to be
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2173
     made to get aString from the receiver.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2174
     The arguments are the costs for
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2175
	s:substitution,
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2176
	k:keyboard type (substitution),
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2177
	c:case-change,
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2178
	i:insertion
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2179
	d:deletion
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2180
     of a character.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2181
     See IEEE transactions on Computers 1976 Pg 172 ff"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2182
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2183
    ^ StringUtilities
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2184
	    levenshteinDistanceFrom:self
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2185
	    to:aString
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2186
	    s:substWeight k:kbdTypoWeight c:caseWeight e:nil i:insrtWeight d:deleteWeight
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2187
!
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2188
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2189
sameAs:aString
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2190
    "Compare the receiver with the argument like =, but ignore case differences.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2191
     Return true or false."
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2192
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2193
    |mySize "{ Class: SmallInteger }"
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2194
     otherSize c1 c2|
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2195
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2196
    self == aString ifTrue:[^ true].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2197
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2198
    mySize := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2199
    otherSize := aString string size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2200
    mySize == otherSize ifFalse:[^ false].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2201
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2202
    1 to:mySize do:[:index |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2203
	c1 := self at:index.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2204
	c2 := aString at:index.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2205
	c1 == c2 ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2206
	    (c1 sameAs:c2) ifFalse:[^ false].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2207
	]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2208
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2209
    ^ true
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2210
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2211
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2212
     'foo' sameAs: 'Foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2213
     'foo' sameAs: 'bar'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2214
     'foo' sameAs: 'foo'
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2215
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2216
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2217
    "Modified: 22.4.1996 / 15:56:17 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2218
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2219
5242
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2220
sameAs:aString ignoreCase:ignoreCase
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2221
    "Compare the receiver with the argument.
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2222
     If ignoreCase is true, this is the same as #sameAs:,
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2223
     if false, this is the same as #=."
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2224
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2225
    ignoreCase ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2226
	^ self sameAs:aString
5242
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2227
    ].
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2228
    ^ self = aString
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2229
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2230
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2231
     'foo' sameAs:'Foo' ignoreCase:false
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2232
     'foo' sameAs:'foo' ignoreCase:true
5242
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2233
    "
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2234
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2235
!
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2236
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2237
sameCharacters:aString
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2238
    "count & return the number of characters which are the same
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2239
     (ignoring case and emphasis) in the receiver and the argument, aString."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2240
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2241
    |n "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2242
     c1 c2 cnt|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2243
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2244
    n := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2245
    n := n min:(aString string size).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2246
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2247
    cnt := 0.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2248
    1 to:n do:[:index |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2249
	c1 := self at:index.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2250
	c2 := aString at:index.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2251
	((c1 == c2)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2252
	or:[c1 asLowercase = c2 asLowercase]) ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2253
	    cnt := cnt + 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2254
	]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2255
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2256
    ^ cnt
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2257
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2258
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2259
     'foobarbaz' sameCharacters: 'foo'
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2260
     'foobarbaz' sameCharacters: 'Foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2261
     'foobarbaz' sameCharacters: 'baz'
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2262
    "
5510
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2263
!
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2264
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2265
sameEmphasisAs:aStringOrText
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2266
    "compare the receivers and the arguments emphasis"
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2267
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2268
    ^ self emphasis = aStringOrText emphasis
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2269
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2270
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2271
     'hello' asText sameEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2272
     'hello' asText sameEmphasisAs: 'hello' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2273
     'hello' asText allBold sameEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2274
     'hello' asText allBold sameEmphasisAs: 'fooba' asText allBold
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2275
     'hello' asText allBold sameEmphasisAs: 'fooba' asText allItalic
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2276
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2277
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2278
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2279
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2280
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  2281
sameStringAndEmphasisAs:aStringOrText
5739
4fd3be7ccc75 oops some relational ops did accept a non-string arg
Claus Gittinger <cg@exept.de>
parents: 5732
diff changeset
  2282
    "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
  2283
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2284
    aStringOrText isString ifFalse:[^ false].
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2285
    (self string = aStringOrText string) ifFalse:[^ false].
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2286
    self hasChangeOfEmphasis = aStringOrText hasChangeOfEmphasis ifFalse:[^ false].
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2287
    ^ self emphasis = aStringOrText emphasis
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2288
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2289
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2290
     'hello' asText sameEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2291
     'hello' asText sameEmphasisAs: 'hello' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2292
     'hello' asText allBold sameEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2293
     'hello' asText allBold sameEmphasisAs: 'fooba' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2294
     'hello' asText allBold sameEmphasisAs: 'fooba' asText allItalic
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2295
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2296
     'hello' sameEmphasisAs: 'hello' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2297
     'hello' sameEmphasisAs: 'hello' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2298
     'hello' sameEmphasisAs: 'fooba'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2299
     'hello' sameEmphasisAs: 'fooba' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2300
     'hello' sameEmphasisAs: 'fooba' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2301
     'hello' sameEmphasisAs: 'fooba' asText allItalic
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2302
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2303
     'hello' asText sameStringAndEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2304
     'hello' asText sameStringAndEmphasisAs: 'hello' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2305
     'hello' asText allBold sameStringAndEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2306
     'hello' asText allBold sameStringAndEmphasisAs: 'fooba' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2307
     'hello' asText allBold sameStringAndEmphasisAs: 'fooba' asText allItalic
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2308
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2309
     'hello' sameStringAndEmphasisAs: 'hello' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2310
     'hello' sameStringAndEmphasisAs: 'hello' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2311
     'hello' sameStringAndEmphasisAs: 'fooba'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2312
     'hello' sameStringAndEmphasisAs: 'fooba' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2313
     'hello' sameStringAndEmphasisAs: 'fooba' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2314
     'hello' sameStringAndEmphasisAs: 'fooba' asText allItalic
5510
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2315
    "
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2316
!
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2317
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2318
spellAgainst: aString
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2319
    "return an integer between 0 and 100 indicating how similar
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2320
     the argument is to the receiver.  No case conversion is done.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2321
     This algorithm is much simpler (but also less exact) than the
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2322
     levenshtein distance. Experiment which is better for your
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2323
     application."
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2324
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2325
    | i1     "{ Class: SmallInteger }"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2326
      i2     "{ Class: SmallInteger }"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2327
      next1  "{ Class: SmallInteger }"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2328
      next2  "{ Class: SmallInteger }"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2329
      size1  "{ Class: SmallInteger }"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2330
      size2  "{ Class: SmallInteger }"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2331
      score  "{ Class: SmallInteger }"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2332
      maxLen "{ Class: SmallInteger }" |
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2333
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2334
    size1 := self size.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2335
    size2 := aString size.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2336
    maxLen := size1 max:size2.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2337
    score := 0.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2338
    i1 := i2 := 1.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2339
    [i1 <= size1 and: [i2 <= size2]] whileTrue:[
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2340
	next1 := i1 + 1.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2341
	next2 := i2 + 1.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2342
	(self at:i1) == (aString at:i2) ifTrue: [
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2343
	    score := score+1.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2344
	    i1 := next1.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2345
	    i2 := next2
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2346
	] ifFalse: [
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2347
	    (i2 < size2 and: [(self at:i1) == (aString at:next2)]) ifTrue: [
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2348
		i2 := next2
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2349
	    ] ifFalse: [
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2350
		(i1 < size1 and: [(self at:next1) == (aString at:i2)]) ifTrue: [
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2351
		    i1 := next1
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2352
		] ifFalse: [
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2353
		    i1 := next1.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2354
		    i2 := next2
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2355
		]
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2356
	    ]
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2357
	]
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2358
    ].
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2359
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2360
    score == maxLen ifTrue: [^ 100].
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2361
    ^ 100 * score // maxLen
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2362
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2363
    "
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2364
     'Smalltalk' spellAgainst: 'Smalltlak'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2365
     'Smalltalk' spellAgainst: 'smalltlak'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2366
     'Smalltalk' spellAgainst: 'smalltalk'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2367
     'Smalltalk' spellAgainst: 'smalltlk'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2368
     'Smalltalk' spellAgainst: 'Smalltolk'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2369
    "
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2370
!
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2371
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2372
startsWith:aString
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2373
    "return true, if the receiver starts with something, aString.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2374
     If the argument is empty, true is returned."
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2375
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2376
    |s|
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2377
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2378
    (s := self string) ~~ self ifTrue:[
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2379
	^ s startsWith:aString
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2380
    ].
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2381
    ^ super startsWith:aString
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2382
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2383
    "
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2384
     'hello world' startsWith:'hello'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2385
     'hello world' asText allBold startsWith:'hello'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2386
     'hello world' asText allBold startsWith:''
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2387
    "
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2388
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2389
    "Created: 12.5.1996 / 15:46:40 / cg"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2390
    "Modified: 12.5.1996 / 15:49:24 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2391
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2392
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2393
!CharacterArray methodsFor:'converting'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2394
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2395
asArrayOfSubstrings
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2396
    "return an array of substrings from the receiver, interpreting
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2397
     separators (i.e. spaces & newlines) as word-delimiters.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2398
     This is a compatibility method - the actual work is done in
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2399
     asCollectionOfWords."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2400
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2401
    ^ self asCollectionOfWords asArray
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2402
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2403
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2404
     '1 one two three four 5 five' asArrayOfSubstrings
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2405
     '1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2406
one
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2407
	two three four 5 five' asArrayOfSubstrings
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
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2410
11881
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2411
asAsciiZ
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2412
    "if the receiver does not end with a 0-valued character, return a copy of it,
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2413
     with an additional 0-character. Otherwise return the receiver. This is sometimes
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2414
     needed when a string has to be passed to C, which needs 0-terminated strings.
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2415
     Notice, that all singleByte strings are already 0-terminated in ST/X, whereas wide
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2416
     strings are not."
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2417
12658
2e9c209be0cc changed: #asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 12615
diff changeset
  2418
    (self notEmpty and:[self last codePoint == 0]) ifTrue:[^ self ].
11881
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2419
    ^ self copyWith:(Character value:0).
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2420
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2421
    "
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2422
     'abc' asAsciiZ
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2423
     'abc' asWideString asAsciiZ
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2424
    "
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2425
!
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2426
13524
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2427
asByteArray
14555
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2428
    |bytes sz bytesPerCharacter idx str|
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2429
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2430
    str := self string.
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2431
    str ~~ self ifTrue:[
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2432
        "/ for text and other wrappers
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2433
        ^ str asByteArray
13611
ba8c7372218a variable renamed in: #inspector2TabBytes
Claus Gittinger <cg@exept.de>
parents: 13524
diff changeset
  2434
    ].
ba8c7372218a variable renamed in: #inspector2TabBytes
Claus Gittinger <cg@exept.de>
parents: 13524
diff changeset
  2435
ba8c7372218a variable renamed in: #inspector2TabBytes
Claus Gittinger <cg@exept.de>
parents: 13524
diff changeset
  2436
    "/ for real strings, a fallback
13524
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2437
    sz := self size.
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2438
    bytesPerCharacter := self bitsPerCharacter // 8.
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2439
    bytes := ByteArray new:(sz * bytesPerCharacter).
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2440
    idx := 1.
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2441
    self do:[:char |
14555
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2442
        |code|
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2443
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2444
        code := char codePoint.
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2445
        bytesPerCharacter == 2 ifTrue:[
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2446
            bytes unsignedShortAt:idx put:code
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2447
        ] ifFalse:[
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2448
            bytesPerCharacter == 4 ifTrue:[
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2449
                bytes unsignedLongAt:idx put:code
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2450
            ] ifFalse:[
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2451
                bytes at:idx put:code
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2452
            ].
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2453
        ].
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2454
        idx := idx + bytesPerCharacter.
13524
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2455
    ].
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2456
    ^ bytes
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2457
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2458
    "Created: / 27-07-2011 / 00:56:17 / cg"
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2459
!
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2460
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2461
asCollectionOfLines
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2462
    "return a collection containing the lines (separated by cr)
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2463
     of the receiver. If multiple cr's occur in a row, the result will
14456
d7c3e67647f1 comment/format in: #asCollectionOfLines
Claus Gittinger <cg@exept.de>
parents: 14455
diff changeset
  2464
     contain empty strings. 
d7c3e67647f1 comment/format in: #asCollectionOfLines
Claus Gittinger <cg@exept.de>
parents: 14455
diff changeset
  2465
     If the string ends with a cr, an empty line will be found as last element of the resulting collection.
d7c3e67647f1 comment/format in: #asCollectionOfLines
Claus Gittinger <cg@exept.de>
parents: 14455
diff changeset
  2466
     See also #asCollectionOfLinesWithReturn
d7c3e67647f1 comment/format in: #asCollectionOfLines
Claus Gittinger <cg@exept.de>
parents: 14455
diff changeset
  2467
     (would have rather changed this method instead of adding another one, but a lot of code already uses
d7c3e67647f1 comment/format in: #asCollectionOfLines
Claus Gittinger <cg@exept.de>
parents: 14455
diff changeset
  2468
      this method and we did not want to risk any incompatibilities)"
14455
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2469
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2470
    ^ self asCollectionOfSubstringsSeparatedBy:Character cr.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2471
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2472
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2473
     '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
  2474
     '1 one\\\\2 two\3 three' withCRs asCollectionOfLines
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2475
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2476
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2477
14455
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2478
asCollectionOfLinesWithReturn
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2479
    "return a collection containing the lines (separated by cr)
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2480
     of the receiver. If multiple cr's occur in a row, the result will
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2481
     contain empty strings."
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2482
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2483
    |lines|
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2484
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2485
    lines := self asCollectionOfSubstringsSeparatedBy:Character cr.
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2486
    lines last isEmpty ifTrue:[
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2487
        ^ lines copyWithoutLast:1
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2488
    ].
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2489
    ^ lines
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2490
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2491
    "
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2492
     '1\2\3' withCRs asCollectionOfLines
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2493
     '1\2\3\' withCRs asCollectionOfLines
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2494
     '1\2\3' withCRs asCollectionOfLinesWithReturn
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2495
     '1\2\3\' withCRs asCollectionOfLinesWithReturn
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2496
    "
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2497
!
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2498
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2499
asCollectionOfSubstringsSeparatedBy:aCharacter
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2500
    "return a collection containing the lines (separated by aCharacter)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2501
     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
  2502
     the result will contain empty strings."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2503
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2504
    ^ self asCollectionOfSubCollectionsSeparatedBy:aCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2505
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2506
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2507
     '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
  2508
     '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
  2509
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2510
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2511
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2512
asCollectionOfSubstringsSeparatedBy:aCharacter exceptIn:ch
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2513
    "return a collection containing the lines (separated by aCharacter)
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2514
     of the receiver. If aCharacter occurs multiple times in a row,
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2515
     the result will contain empty strings. The separation is not done,
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2516
     inside a matching pair of ch-substrings. Can be used to tokenize csv-like strings."
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2517
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2518
    |lines myClass except i c
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2519
     startIndex    "{ Class:SmallInteger }"
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2520
     stopIndex     "{ Class:SmallInteger }" |
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2521
11905
cbc2191cfe2d return stringCollections from asCollectionOfXXX
Claus Gittinger <cg@exept.de>
parents: 11904
diff changeset
  2522
    lines := StringCollection new.
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2523
    myClass := self species.
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2524
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2525
    startIndex := 1.
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2526
    except := false.
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2527
    [
14455
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2528
        i := startIndex-1.
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2529
        [
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2530
            i := i+1.
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2531
            c := self at:i.
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2532
            c = ch ifTrue:[ except := except not. ].
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2533
            i < self size and:[except or:[c ~= aCharacter]]
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2534
        ] whileTrue.
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2535
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2536
        c = aCharacter ifTrue:[
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2537
            stopIndex := i -1.
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2538
        ] ifFalse: [
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2539
            stopIndex := i.
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2540
        ].
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2541
        (stopIndex < startIndex) ifTrue: [
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2542
            lines add:(myClass new:0)
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2543
        ] ifFalse: [
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2544
            lines add:(self copyFrom:startIndex to:stopIndex)
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2545
        ].
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2546
        startIndex := stopIndex + 2.
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2547
        startIndex <= self size
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2548
    ] whileTrue.
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2549
    ^ lines
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2550
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2551
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2552
     'asd''f;d''dd;s' asCollectionOfSubstringsSeparatedBy:$; exceptIn:$'
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2553
    "
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2554
    "/ 'asd "hello bla" foo "bla bla" bar' asCollectionOfSubstringsSeparatedBy:$  exceptIn:$"
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2555
!
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2556
13344
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2557
asCollectionOfSubstringsSeparatedBy:aFieldSeparatorString textSeparator:aTextSeparatorOrNil
13343
3f058ad0d2f1 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13332
diff changeset
  2558
    "return a collection containing the words (separated by aFieldSeparatorString) of the receiver.
13327
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2559
     Individual words might be enclosed in aTextSeparator characters, in case they contain blanks or fieldSeparators.
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2560
     Typically used for CSV line parsing, with a $; as aFieldSeparator and $'' (dquote) as textSeparator."
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2561
13344
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2562
    |aTextSeparatorChar items scanningWord inStream element lastIsFieldSeparator sz|
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2563
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2564
    aTextSeparatorOrNil isNil ifTrue:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2565
	^ self asCollectionOfSubstringsSeparatedByAll: aFieldSeparatorString
13327
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2566
    ].
13344
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2567
    sz := aTextSeparatorOrNil size.
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2568
    sz = 0 ifTrue:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2569
	aTextSeparatorChar := aTextSeparatorOrNil
13344
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2570
    ] ifFalse:[sz = 1  ifTrue:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2571
	"this is a String. Fetch the first character - compatibility to older expecco libs"
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2572
	aTextSeparatorChar := aTextSeparatorOrNil first.
13344
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2573
    ] ifFalse:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2574
	self error:'textSeparatoSize > 1'.
13344
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2575
    ]].
13327
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2576
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2577
    items := OrderedCollection new.
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2578
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2579
    inStream := ReadStream on:self.
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2580
    [
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2581
	inStream skipSeparators.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2582
	inStream atEnd
13327
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2583
    ] whileFalse:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2584
	lastIsFieldSeparator := false.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2585
	inStream peek == aTextSeparatorChar ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2586
	    inStream next.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2587
	    element := ''.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2588
	    scanningWord := true.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2589
	    [ inStream atEnd not and:[scanningWord] ] whileTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2590
		element := element , (inStream upTo:aTextSeparatorChar).
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2591
		(inStream peek == aTextSeparatorChar) ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2592
		    element := element , aTextSeparatorChar .
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2593
		    inStream next.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2594
		] ifFalse:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2595
		    scanningWord := false.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2596
		].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2597
	    ].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2598
	    inStream upToAll:aFieldSeparatorString.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2599
	] ifFalse:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2600
	    element := inStream upToAll:aFieldSeparatorString
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2601
	].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2602
	items add:element.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2603
	lastIsFieldSeparator := (inStream skipThroughAll:aFieldSeparatorString) notNil.
13343
3f058ad0d2f1 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13332
diff changeset
  2604
    ].
3f058ad0d2f1 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13332
diff changeset
  2605
    lastIsFieldSeparator ifTrue:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2606
	"empty element at the end of the line"
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2607
	items add:''.
13327
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2608
    ].
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2609
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2610
    ^ items
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2611
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2612
    "
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2613
     self assert:(('#First#, #Second,SecondAdd#, #Third#' asCollectionOfSubstringsSeparatedBy:',' textSeparator: $#)
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2614
		  sameContentsAs:#('First' 'Second,SecondAdd' 'Third')).
13327
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2615
     self assert:(('#Fir##st#, #Second,SecondAdd#, #Third#' asCollectionOfSubstringsSeparatedBy:',' textSeparator: $#)
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2616
		  sameContentsAs:#('Fir#st' 'Second,SecondAdd' 'Third')).
13327
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2617
     self assert:(('#Fir##st#, Second,SecondAdd, #Third#' asCollectionOfSubstringsSeparatedBy:',' textSeparator: $#)
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2618
		  sameContentsAs:#('Fir#st' 'Second' 'SecondAdd' 'Third')).
13343
3f058ad0d2f1 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13332
diff changeset
  2619
     self assert:(('First,Second,Third,,' asCollectionOfSubstringsSeparatedBy:',' textSeparator:nil)
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2620
		   sameContentsAs:#('First' 'Second' 'Third' '' '')).
13344
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2621
     self assert:(('First,Second,Third,,' asCollectionOfSubstringsSeparatedBy:',' textSeparator:'#')
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2622
		   sameContentsAs:#('First' 'Second' 'Third' '' '')).
13327
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2623
    "
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2624
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2625
    "Modified: / 07-04-2011 / 13:23:19 / cg"
10501
999589445aa7 add new method for splitting a csv string into csv elements
ab
parents: 10437
diff changeset
  2626
!
999589445aa7 add new method for splitting a csv string into csv elements
ab
parents: 10437
diff changeset
  2627
7339
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2628
asCollectionOfSubstringsSeparatedByAll:aSeparatorString
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2629
    "return a collection containing the lines (separated by aSeparatorString)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2630
     of the receiver. If aSeparatorString occurs multiple times in a row,
7339
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2631
     the result will contain empty strings."
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2632
8852
9f5984eff2c2 use asCollectionOfSubCollectionsSeparatedBy*
Claus Gittinger <cg@exept.de>
parents: 8794
diff changeset
  2633
    ^ self asCollectionOfSubCollectionsSeparatedByAll:aSeparatorString
9f5984eff2c2 use asCollectionOfSubCollectionsSeparatedBy*
Claus Gittinger <cg@exept.de>
parents: 8794
diff changeset
  2634
9f5984eff2c2 use asCollectionOfSubCollectionsSeparatedBy*
Claus Gittinger <cg@exept.de>
parents: 8794
diff changeset
  2635
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2636
     '1::2::3::4::5::' asCollectionOfSubstringsSeparatedByAll:'::'
7339
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2637
    "
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2638
!
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2639
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2640
asCollectionOfSubstringsSeparatedByAny:aCollectionOfSeparators
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2641
    "return a collection containing the words (separated by any character
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2642
     from aCollectionOfSeparators) of the receiver.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2643
     This allows breaking up strings using any character as separator."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2644
8852
9f5984eff2c2 use asCollectionOfSubCollectionsSeparatedBy*
Claus Gittinger <cg@exept.de>
parents: 8794
diff changeset
  2645
    ^ self asCollectionOfSubCollectionsSeparatedByAny:aCollectionOfSeparators
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2646
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2647
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2648
     'hello:world:isnt:this nice' asCollectionOfSubstringsSeparatedByAny:#($:)
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2649
     'hello:world:isnt:this nice' asCollectionOfSubstringsSeparatedByAny:':'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2650
     'hello:world:isnt:this nice' asCollectionOfSubstringsSeparatedByAny:(Array with:$: with:Character space)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2651
     'hello:world:isnt:this nice' asCollectionOfSubstringsSeparatedByAny:': '
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2652
     'h1e2l3l4o' asCollectionOfSubstringsSeparatedByAny:($1 to: $9)
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2653
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2654
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2655
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2656
asCollectionOfWords
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2657
    "return a collection containing the words (separated by whitespace)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2658
     of the receiver. Multiple occurrences of whitespace characters will
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2659
     be treated like one - i.e. whitespace is skipped."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2660
7797
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2661
    |words|
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2662
11905
cbc2191cfe2d return stringCollections from asCollectionOfXXX
Claus Gittinger <cg@exept.de>
parents: 11904
diff changeset
  2663
    words := StringCollection new.
7797
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2664
    self asCollectionOfWordsDo:[:w | words add:w].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2665
    ^ words
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2666
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2667
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2668
     'hello world isnt this nice' asCollectionOfWords
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2669
     '    hello    world   isnt   this   nice  ' asCollectionOfWords
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2670
     'hello' asCollectionOfWords
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2671
     '' asCollectionOfWords
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2672
     '      ' asCollectionOfWords
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2673
     ' foo bar__baz__bla__ bar ' asCollectionOfWords
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2674
     ' foo __bar__baz__bla__ bar ' asCollectionOfWords
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2675
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2676
!
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
asCollectionOfWordsDo:aBlock
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2679
    "evaluate aBlock for each word (separated by whitespace) of the receiver.
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2680
     Multiple occurrences of whitespace characters will be treated like one
7797
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2681
     - i.e. whitespace is skipped.
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2682
     Returns the number of words (i.e. the number of invocations of aBlock)."
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2683
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2684
    |count  "{ Class:SmallInteger }"
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2685
     start  "{ Class:SmallInteger }"
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2686
     stop   "{ Class:SmallInteger }"
7797
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2687
     mySize "{ Class:SmallInteger }"|
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2688
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2689
    count := 0.
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2690
    start := 1.
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2691
    mySize := self size.
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2692
    [start <= mySize] whileTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2693
	start := self indexOfNonSeparatorStartingAt:start.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2694
	start == 0 ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2695
	    ^ count
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2696
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2697
	stop := self indexOfSeparatorStartingAt:start.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2698
	stop == 0 ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2699
	    aBlock value:(self copyFrom:start to:mySize).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2700
	    ^ count + 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2701
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2702
	aBlock value:(self copyFrom:start to:(stop - 1)).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2703
	start := stop.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2704
	count := count + 1
7797
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2705
    ].
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2706
    ^ count
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2707
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2708
    "
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2709
     'hello world isnt this nice' asCollectionOfWordsDo:[:w | Transcript showCR:w]
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2710
     '    hello    world   isnt   this   nice  ' asCollectionOfWordsDo:[:w | Transcript showCR:w]
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2711
     'hello' asCollectionOfWordsDo:[:w | Transcript showCR:w]
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2712
     '' asCollectionOfWordsDo:[:w | Transcript showCR:w]
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2713
     '      ' asCollectionOfWordsDo:[:w | Transcript showCR:w]
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2714
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2715
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2716
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2717
asComposedText
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2718
    "ST-80 compatibility
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2719
     - ST/X does not (as today) support composedTexts."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2720
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2721
    ^ ComposedText fromString:self string
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2722
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2723
    "Modified: 27.4.1996 / 13:30:30 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2724
!
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
asFilename
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2727
    "return a Filename with pathname taken from the receiver"
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
    ^ Filename named:self "(self asSingleByteStringReplaceInvalidWith:$?)"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2730
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2731
    "Modified: 20.5.1996 / 09:38:15 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2732
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2733
3060
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2734
asFixedPoint
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2735
    "read a fixedPoint number from the receiver.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2736
     Notice, that errors may occur during the read,
7423
5b25b8e82453 comments
Claus Gittinger <cg@exept.de>
parents: 7422
diff changeset
  2737
     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
  2738
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2739
    ^ FixedPoint readFromString:self
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2740
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2741
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2742
     '0.123' asFixedPoint
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2743
     '12345' asFixedPoint
3060
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2744
     '(1/5)' asFixedPoint
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2745
     'foo' asFixedPoint
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2746
     Object errorSignal handle:[:ex | ex return:0] do:['foo' asFixedPoint]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2747
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2748
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2749
    "Modified: / 25.10.1997 / 15:19:00 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2750
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2751
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2752
asFixedPoint:scale
3060
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2753
    "read a fixedPoint number with scale number of post-decimal digits
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2754
     from the receiver. Scale controls the number of displayed digits,
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2755
     not the number of actually valid digits.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2756
     Notice, that errors may occur during the read,
7423
5b25b8e82453 comments
Claus Gittinger <cg@exept.de>
parents: 7422
diff changeset
  2757
     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
  2758
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2759
    ^ (FixedPoint readFromString:self) scale:scale
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2760
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2761
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2762
     '0.123' asFixedPoint:2
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2763
     '123456' asFixedPoint:2
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2764
     ('3.14157' asFixedPoint:1) asFixedPoint:5
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2765
     '3.14157' asFixedPoint:2
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2766
     'foo' asFixedPoint:2
3060
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2767
    "
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2768
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2769
    "Modified: / 25.10.1997 / 15:21:57 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2770
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2771
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2772
asFloat
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2773
    "read a float number from the receiver.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2774
     Notice, that errors may occur during the read,
7422
200486204923 comments
Claus Gittinger <cg@exept.de>
parents: 7421
diff changeset
  2775
     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
  2776
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2777
    ^ (Number readFromString:self) asFloat
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2778
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2779
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2780
     '0.123' asFloat
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2781
     '12345' asFloat
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2782
     '(1/5)' asFloat
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2783
     Object errorSignal handle:[:ex | ex return:0] do:['foo' asFloat]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2784
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2785
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2786
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2787
asInteger
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2788
    "convert the receiver into an integer.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2789
     Notice, that errors may occur during the read,
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2790
     so you better setup some exception handler when using this method.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2791
     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
  2792
     in other smalltalks.
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2793
     For less strict integer reading, use Integer readFrom:aString"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2794
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2795
    ^ Integer readFromString:self
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2796
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2797
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2798
     '12345678901234567890' asInteger
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2799
     '-1234' asInteger
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2800
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2801
     The following raises an error:
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2802
	 '0.123' asInteger              <- reader finds more after reading 0
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2803
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2804
     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
  2805
	 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
  2806
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2807
     '0.123' asInteger
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2808
     '0.123' asNumber    <- returns what you expect
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2809
     Object errorSignal handle:[:ex | ex return:0] do:['foo' asInteger]
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2810
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2811
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2812
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2813
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2814
asLowercase
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2815
    "return a copy of myself in lowercase letters"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2816
8003
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  2817
    |newStr c bitsPerCharacter
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2818
     mySize "{ Class: SmallInteger }" |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2819
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2820
    mySize := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2821
    mySize == 0 ifTrue:[^ self].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2822
    newStr := self species new:mySize.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2823
    bitsPerCharacter := newStr bitsPerCharacter.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2824
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2825
    1 to:mySize do:[:i |
14555
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2826
        c := (self at:i) asLowercase.
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2827
        (c bitsPerCharacter > bitsPerCharacter 
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2828
         and:[c stringSpecies ~= newStr stringSpecies]) ifTrue:[
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2829
            newStr := c stringSpecies fromString:newStr.
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2830
        ].
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2831
        newStr at:i put:c
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2832
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2833
    ^ newStr
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2834
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2835
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2836
     'HelloWorld' asLowercase
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2837
     'HelloWorld' asLowercaseFirst
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2838
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2839
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2840
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2841
asLowercaseFirst
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2842
    "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
  2843
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2844
    |newString firstChar firstCharAsLowercase|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2845
11525
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
  2846
    self isEmpty ifTrue:[^ self].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2847
    firstChar := (self at:1).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2848
    firstCharAsLowercase := firstChar asLowercase.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2849
    firstChar == firstCharAsLowercase ifTrue:[ ^ self].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2850
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2851
    firstCharAsLowercase bitsPerCharacter > self bitsPerCharacter ifTrue:[
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2852
	newString := firstCharAsLowercase stringSpecies fromString:self.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2853
    ] ifFalse:[
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2854
	newString := self stringSpecies fromString:self.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2855
    ].
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2856
    newString at:1 put:firstCharAsLowercase.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2857
    ^ newString
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2858
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2859
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2860
     'HelloWorld' asLowercase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2861
     'HelloWorld' asLowercaseFirst
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2862
    "
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
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2865
asLowercaseLast
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2866
    "return a copy of myself where the last character is
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2867
     converted to lowercase."
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2868
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2869
    |newString sz|
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2870
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2871
    sz := self size.
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2872
    newString := self copyFrom:1 to:sz.
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2873
    sz > 0 ifTrue:[
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2874
	newString at:sz put:(newString at:sz) asLowercase
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2875
    ].
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2876
    ^ newString
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2877
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2878
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2879
     'HelloWorld' asLowercase
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2880
     'HelloWorlD' asLowercaseLast
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2881
    "
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2882
!
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2883
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2884
asNumber
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2885
    "read a number from the receiver.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2886
     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
  2887
     so you better setup some signal handler when using this method.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2888
     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
  2889
     it does not handle smalltalk numbers (i.e. radix).
c6396149df08 comment
Claus Gittinger <cg@exept.de>
parents: 9087
diff changeset
  2890
     To read a smalltalk number, use Number >> readSmalltalkFrom:.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2891
     This may change if ANSI specifies it."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2892
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2893
"/ ST-80 behavior:
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2894
"/  ^ Number readFromString:self onError:0
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2895
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2896
    ^ Number readFromString:self
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2897
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2898
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2899
     '123'     asNumber
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2900
     '123.567' asNumber
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2901
     '(5/6)'   asNumber
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2902
     'foo'     asNumber
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2903
     Object errorSignal handle:[:ex | ex returnWith:0] do:['foo' asNumber]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2904
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2905
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2906
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2907
asNumberFromFormatString:ignored
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2908
    "read a number from the receiver, ignoring any nonDigit characters.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2909
     This is typically used to convert from strings which include
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2910
     dollar-signs or millenium digits. However, this method also ignores
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2911
     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
  2912
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2913
    |tempString|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2914
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2915
    tempString := self collect:[:char | char isDigit].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2916
    ^ Number readFromString:tempString onError:0
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2917
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2918
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2919
     'USD 123' asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2920
     'DM 123'  asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2921
     '123'     asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2922
     '123.567' asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2923
     '(5/6)'   asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2924
     'foo'     asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2925
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2926
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2927
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2928
asOneByteString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2929
    "return the receiver converted to a 'normal' string.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2930
     Same as asSingleByteString - for compatibility."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2931
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2932
    ^ self asSingleByteString
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
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2935
asSingleByteString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2936
    "return the receiver converted to a 'normal' string.
11904
f766874c31b7 comment
Claus Gittinger <cg@exept.de>
parents: 11881
diff changeset
  2937
     Raises an error if unrepresentable characters are encountered.
f766874c31b7 comment
Claus Gittinger <cg@exept.de>
parents: 11881
diff changeset
  2938
     See also: asSingleByteStringIfPossible and asSingleByteStringReplaceInvalidWith:"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2939
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2940
    ^ String fromString:self
11904
f766874c31b7 comment
Claus Gittinger <cg@exept.de>
parents: 11881
diff changeset
  2941
f766874c31b7 comment
Claus Gittinger <cg@exept.de>
parents: 11881
diff changeset
  2942
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2943
     (Unicode16String with:(Character value:16rFF)) asSingleByteString
11904
f766874c31b7 comment
Claus Gittinger <cg@exept.de>
parents: 11881
diff changeset
  2944
     (Unicode16String with:(Character value:16rFFFF)) asSingleByteString
f766874c31b7 comment
Claus Gittinger <cg@exept.de>
parents: 11881
diff changeset
  2945
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2946
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2947
7977
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  2948
asSingleByteStringIfPossible
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  2949
    "if possible, return the receiver converted to a 'normal' string.
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  2950
     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
  2951
14555
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2952
    self isWideString ifFalse:[^ self].
8102
e0537422e2d3 Use the ANSI-blessed #codePoint instead of deprecated #asciiValue
Stefan Vogel <sv@exept.de>
parents: 8083
diff changeset
  2953
    (self contains:[:char | char codePoint > 255]) ifFalse:[^ self asSingleByteString].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2954
    ^ self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2955
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2956
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2957
     'hello' asSingleByteStringIfPossible
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2958
     'hello' asUnicodeString asSingleByteStringIfPossible
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2959
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2960
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2961
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2962
asSingleByteStringReplaceInvalidWith:replacementCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2963
    "return the receiver converted to a 'normal' string,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2964
     with invalid characters replaced by replacementCharacter.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2965
     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
  2966
     and replace characters above code-255 with some replacement."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2967
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2968
    |newString|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2969
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2970
    newString := String new:(self size).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2971
    1 to:self size do:[:idx |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2972
	|char|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2973
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2974
	char := self at:idx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2975
	char codePoint <= 16rFF ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2976
	    newString at:idx put:char
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2977
	] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2978
	    newString at:idx put:replacementCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2979
	].
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2980
    ].
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2981
    ^ newString
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2982
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2983
    "Created: 30.6.1997 / 13:02:14 / cg"
7977
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  2984
!
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  2985
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2986
asString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2987
    "return myself - I am a string"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2988
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2989
    ^ self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2990
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2991
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2992
asStringCollection
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2993
    "return a collection of lines from myself."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2994
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2995
    ^ StringCollection fromString:self "string"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2996
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2997
    "Modified: 13.5.1996 / 20:36:59 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2998
!
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  2999
1434
a317ba02d685 allow aText asSymbol
Claus Gittinger <cg@exept.de>
parents: 1429
diff changeset
  3000
asSymbol
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  3001
    "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
  3002
     The receiver must be a singleByte-String.
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  3003
     TwoByte- and FourByteSymbols are (currently ?) not allowed."
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  3004
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  3005
    |str|
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  3006
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3007
    str := self string.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3008
    str ~~ self ifTrue:[ ^ str asSymbol ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3009
    ^ self asSingleByteString asSymbol
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3010
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3011
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3012
asSymbolIfInterned
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3013
    "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
  3014
     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
  3015
	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
  3016
     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
  3017
     The receiver must be a singleByte-String.
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  3018
     TwoByte- and FourByteSymbols are (currently ?) not allowed."
1435
3ee1fde2aa58 allow asSymbolIfInterned for Texts
Claus Gittinger <cg@exept.de>
parents: 1434
diff changeset
  3019
6642
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  3020
    |s|
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  3021
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  3022
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  3023
    s := self string.
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  3024
    s ~~ self ifTrue:[
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  3025
       ^ s asSymbolIfInterned
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  3026
    ].
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  3027
    ^ nil.
1435
3ee1fde2aa58 allow asSymbolIfInterned for Texts
Claus Gittinger <cg@exept.de>
parents: 1434
diff changeset
  3028
3ee1fde2aa58 allow asSymbolIfInterned for Texts
Claus Gittinger <cg@exept.de>
parents: 1434
diff changeset
  3029
    "Created: 22.5.1996 / 16:37:04 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3030
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3031
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3032
asText
9403
ba6ca2bcfe10 documentation
Stefan Vogel <sv@exept.de>
parents: 9391
diff changeset
  3033
    "return a Text-object (string with emphasis) from myself."
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3034
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3035
    "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
  3036
    Text isNil ifTrue:[^ self].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3037
    ^ Text fromString:self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3038
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3039
    "Created: 12.5.1996 / 10:41:14 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3040
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3041
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3042
asTitlecase
8027
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3043
    "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
  3044
     and everything else to lowercase.
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3045
     See the comment in Character on what titlecase is."
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3046
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3047
    |newStr c bitsPerCharacter
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3048
     mySize "{ Class: SmallInteger }" |
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3049
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3050
    mySize := self size.
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3051
    newStr := self species new:mySize.
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3052
    bitsPerCharacter := newStr bitsPerCharacter.
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3053
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3054
    1 to:mySize do:[:i |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3055
	i == 1 ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3056
	    c := (self at:i) asTitlecase.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3057
	] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3058
	    c := (self at:i) asLowercase.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3059
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3060
	c bitsPerCharacter > bitsPerCharacter ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3061
	    newStr := c stringSpecies fromString:newStr.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3062
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3063
	newStr at:i put:c
8027
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3064
    ].
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3065
    ^ newStr
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3066
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3067
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3068
     'helloWorld' asTitlecase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3069
     'HelloWorld' asTitlecase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3070
     'HELLOWORLD' asTitlecase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3071
     'helloworld' asTitlecase
8027
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3072
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3073
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3074
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3075
asTitlecaseFirst
8023
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3076
    "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
  3077
     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
  3078
     (2-character glyphs), which consist of an upper- and lower-case characters.
93db40068fba comment
Claus Gittinger <cg@exept.de>
parents: 8023
diff changeset
  3079
     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
  3080
     receiver."
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3081
8026
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  3082
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3083
     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
  3084
     (Let us write this compound character using ASCII as 'dz'.)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3085
     This character uppercases to character U+01F1, LATIN CAPITAL LETTER DZ.
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3086
     (Which is basically 'DZ'.)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3087
     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
  3088
     (Which we can write 'Dz'.)
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  3089
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  3090
      character uppercase titlecase
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  3091
      --------- --------- ---------
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  3092
      dz        DZ        Dz
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  3093
    "
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  3094
8023
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3095
    |newString firstChar firstCharAsTitlecase|
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3096
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3097
    firstChar := (self at:1).
8025
04d9b6ef3012 comments
Claus Gittinger <cg@exept.de>
parents: 8024
diff changeset
  3098
    firstCharAsTitlecase := firstChar asTitlecase.
8023
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3099
    firstChar == firstCharAsTitlecase ifTrue:[ ^ self].
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  3100
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  3101
    firstCharAsTitlecase bitsPerCharacter > self bitsPerCharacter ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3102
	newString := firstCharAsTitlecase stringSpecies fromString:self.
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  3103
    ] ifFalse:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3104
	newString := self stringSpecies fromString:self.
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  3105
    ].
8023
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3106
    newString at:1 put:firstCharAsTitlecase.
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3107
    ^ newString
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3108
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3109
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3110
     'helloWorld' asTitlecaseFirst
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3111
     'HelloWorld' asTitlecaseFirst
8023
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3112
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3113
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3114
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3115
asTwoByteString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3116
    "return the receiver converted to a two-byte string.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3117
     Will be obsolete soon."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3118
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3119
    ^ TwoByteString fromString:self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3120
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3121
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3122
asURI
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3123
    "return an URI with string taken from the receiver"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3124
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3125
    ^ URI fromString:self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3126
!
8710
Stefan Vogel <sv@exept.de>
parents: 8646
diff changeset
  3127
5776
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  3128
asURL
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  3129
    "return an URL-object from myself."
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  3130
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  3131
    ^ URL fromString:self
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  3132
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  3133
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3134
     'http://www.exept.de:80/index.html' asURL host
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3135
     'http://www.exept.de:80/index.html' asURL port
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3136
     'http://www.exept.de:80/index.html' asURL method
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3137
     'http://www.exept.de:80/index.html' asURL path
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3138
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3139
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3140
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3141
asUnicode16String
15035
ecbb70df7a5c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14993
diff changeset
  3142
    "return the receiver in a two-byte per character representation.
ecbb70df7a5c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14993
diff changeset
  3143
     Normally, the internal ST/X representation should be transparent and not
ecbb70df7a5c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14993
diff changeset
  3144
     of the programmer's concern; except when strings are passed to the outside world,
ecbb70df7a5c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14993
diff changeset
  3145
     such as wide-string ffi calls or file contents."
ecbb70df7a5c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14993
diff changeset
  3146
ecbb70df7a5c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14993
diff changeset
  3147
    "someone added the comment:
ecbb70df7a5c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14993
diff changeset
  3148
        that's not really true - characters above ascii 16r7F may need special treatment.
ecbb70df7a5c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14993
diff changeset
  3149
     Who wrote the above comment? 
ecbb70df7a5c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14993
diff changeset
  3150
     It is bogus. Of course that is always correct!! Please do not mix Unicode with UTF8;
ecbb70df7a5c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14993
diff changeset
  3151
     UTF8 is an encoding of a Unicode character."
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3152
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3153
    ^ ((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
  3154
!
8295
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3155
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3156
asUnicode32String
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3157
    "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
  3158
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3159
    ^ ((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
  3160
!
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3161
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3162
asUnicodeString
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3163
    "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
  3164
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3165
    ^ ((UnicodeString new:self size) replaceFrom:1 to:self size with:self startingAt:1)
14141
e86d245213b0 comment/format in: #asUnicodeString
Stefan Vogel <sv@exept.de>
parents: 14137
diff changeset
  3166
e86d245213b0 comment/format in: #asUnicodeString
Stefan Vogel <sv@exept.de>
parents: 14137
diff changeset
  3167
    "
e86d245213b0 comment/format in: #asUnicodeString
Stefan Vogel <sv@exept.de>
parents: 14137
diff changeset
  3168
        'Hello World' asUnicodeString
e86d245213b0 comment/format in: #asUnicodeString
Stefan Vogel <sv@exept.de>
parents: 14137
diff changeset
  3169
    "
8295
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3170
!
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3171
13073
19261a5b4430 added: #asUnixFilename
Claus Gittinger <cg@exept.de>
parents: 13050
diff changeset
  3172
asUnixFilename
19261a5b4430 added: #asUnixFilename
Claus Gittinger <cg@exept.de>
parents: 13050
diff changeset
  3173
    "return a UnixFilename with pathname taken from the receiver"
19261a5b4430 added: #asUnixFilename
Claus Gittinger <cg@exept.de>
parents: 13050
diff changeset
  3174
19261a5b4430 added: #asUnixFilename
Claus Gittinger <cg@exept.de>
parents: 13050
diff changeset
  3175
    ^ UnixFilename named:self
19261a5b4430 added: #asUnixFilename
Claus Gittinger <cg@exept.de>
parents: 13050
diff changeset
  3176
19261a5b4430 added: #asUnixFilename
Claus Gittinger <cg@exept.de>
parents: 13050
diff changeset
  3177
    "Created: / 20-09-2010 / 21:42:55 / cg"
19261a5b4430 added: #asUnixFilename
Claus Gittinger <cg@exept.de>
parents: 13050
diff changeset
  3178
!
19261a5b4430 added: #asUnixFilename
Claus Gittinger <cg@exept.de>
parents: 13050
diff changeset
  3179
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3180
asUppercase
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3181
    "return a copy of myself in uppercase letters"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3182
8003
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3183
    |newStr c bitsPerCharacter
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3184
     mySize "{ Class: SmallInteger }" |
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3185
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3186
    mySize := self size.
8954
12e701d7b5ac allow for receiver to be empty in asLowercase and asUppercase.
Claus Gittinger <cg@exept.de>
parents: 8938
diff changeset
  3187
    mySize == 0 ifTrue:[^ self].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3188
    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
  3189
    bitsPerCharacter := newStr bitsPerCharacter.
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3190
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3191
    1 to:mySize do:[:i |
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3192
	c := (self at:i) asUppercase.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3193
	c bitsPerCharacter > bitsPerCharacter ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3194
	    newStr := c stringSpecies fromString:newStr.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3195
	].
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3196
	newStr at:i put:c
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3197
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3198
    ^ newStr
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3199
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3200
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3201
     'helloWorld' asUppercase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3202
     'helloWorld' asUppercaseFirst
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3203
     (Character value:16rB5) asString asUppercase   -- needs 16 bits !!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3204
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3205
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3206
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3207
asUppercaseFirst
8003
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3208
    "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
  3209
     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
  3210
     receiver."
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3211
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3212
    |newString firstChar firstCharAsUppercase|
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3213
12679
18c4eabbb673 changed: #asUppercaseFirst
Claus Gittinger <cg@exept.de>
parents: 12665
diff changeset
  3214
    self isEmpty ifTrue:[^ self].
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3215
    firstChar := self at:1.
8003
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3216
    firstCharAsUppercase := firstChar asUppercase.
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3217
    firstChar == firstCharAsUppercase ifTrue:[ ^ self].
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3218
12679
18c4eabbb673 changed: #asUppercaseFirst
Claus Gittinger <cg@exept.de>
parents: 12665
diff changeset
  3219
    "/ very seldom, the uppercase-char needs more bits than the lowercase one (turkish y-diaresis)
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  3220
    firstCharAsUppercase bitsPerCharacter > self bitsPerCharacter ifTrue:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3221
	newString := firstCharAsUppercase stringSpecies fromString:self.
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  3222
    ] ifFalse:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3223
	newString := self stringSpecies fromString:self.
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  3224
    ].
8003
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3225
    newString at:1 put:firstCharAsUppercase.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3226
    ^ newString
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
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3229
     'helloWorld' asUppercase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3230
     'helloWorld' asUppercaseFirst
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3231
     'HelloWorld' asUppercaseFirst
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3232
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3233
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3234
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3235
asUppercaseLast
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3236
    "return a copy of myself where the last character is
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3237
     converted to uppercase."
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3238
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3239
    |newString sz|
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3240
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3241
    sz := self size.
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3242
    newString := self copyFrom:1 to:sz.
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3243
    sz > 0 ifTrue:[
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3244
	newString at:sz put:(newString at:sz) asUppercase
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3245
    ].
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3246
    ^ newString
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3247
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3248
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3249
     'HelloWorld' asUppercase
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3250
     'HelloWorld' asUppercaseLast
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3251
    "
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3252
!
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3253
11062
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3254
literalArrayEncoding
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3255
    "encode myself as an array literal, from which a copy of the receiver
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3256
     can be reconstructed with #decodeAsLiteralArray."
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3257
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3258
    ^ self
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3259
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3260
    "Modified: 1.9.1995 / 02:25:45 / claus"
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3261
    "Modified: 22.4.1996 / 13:00:50 / cg"
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3262
!
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3263
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3264
string
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3265
    "return the receiver - for ST-80 compatibility"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3266
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3267
    ^ self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3268
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3269
    "Modified: 27.4.1996 / 13:29:30 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3270
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3271
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3272
!CharacterArray methodsFor:'copying'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3273
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3274
, aStringOrCharacter
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3275
    "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
  3276
     This is nonStandard, but convenient"
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3277
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3278
    |myWidth otherWidth|
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3279
1050
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3280
    aStringOrCharacter isCharacter ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3281
	^ self copyWith:aStringOrCharacter
1050
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3282
    ].
1396
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3283
    aStringOrCharacter isText ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3284
	^ aStringOrCharacter concatenateFromString:self
1396
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3285
    ].
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3286
    aStringOrCharacter isString ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3287
	(otherWidth := aStringOrCharacter bitsPerCharacter) ~~ (myWidth := self bitsPerCharacter) ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3288
	    otherWidth > myWidth ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3289
		^ (aStringOrCharacter species fromString:self) , aStringOrCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3290
	    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3291
	    ^ self , (self species fromString:aStringOrCharacter)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3292
	].
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3293
    ].
1050
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3294
    ^ super , aStringOrCharacter
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3295
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3296
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3297
     'hello' , $1
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3298
     'hello' , '1'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3299
     'hello' , (' world' asText allBold)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3300
     'hello' , (JISEncodedString fromString:' world')
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3301
     (JISEncodedString fromString:'hello') , ' world'
1411
a3b3ab3044c6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1396
diff changeset
  3302
1422
9a0b792f2953 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1411
diff changeset
  3303
     Transcript showCR:
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3304
	 (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
  3305
    "
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3306
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3307
    "Modified: 28.6.1997 / 00:13:17 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3308
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3309
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3310
,, aString
7020
f51001115a54 comment
penk
parents: 6998
diff changeset
  3311
    "concatenate with a newLine in between"
6965
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3312
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3313
    ^ (self copyWith:Character cr) , aString
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3314
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3315
   "
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3316
     hello ,, world
7020
f51001115a54 comment
penk
parents: 6998
diff changeset
  3317
     'hello' ,, 'world'
6965
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3318
   "
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3319
!
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3320
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3321
chopTo:maxLen
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3322
    "if the receivers size is less or equal to maxLen, return it.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3323
     Otherwise, return a copy of the receiver, where some characters
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3324
     in the middle have been removed for a total string length
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3325
     of maxLen."
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3326
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3327
    |sz n1 n2|
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3328
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3329
    (sz := self size) <= maxLen ifTrue:[ ^ self ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3330
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3331
    n1 := n2 := maxLen // 2.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3332
    maxLen odd ifTrue:[
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3333
	n2 := n1 + 1
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3334
    ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3335
    ^ (self copyFrom:1 to:n1) , (self copyFrom:sz - n2 + 1)
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3336
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3337
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3338
     '12345678901234'   chopTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3339
     '123456789012345'  chopTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3340
     '1234567890123456' chopTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3341
     'aShortString' chopTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3342
     'aVeryLongNameForAStringThatShouldBeShortened' chopTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3343
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3344
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3345
    "Modified: / 24-10-2006 / 12:32:01 / cg"
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3346
!
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3347
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3348
concatenate:string1 and:string2
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3349
    "return the concatenation of myself and the arguments, string1 and string2.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3350
     This is equivalent to self , string1 , string2
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3351
     - 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
  3352
     is known to be a string."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3353
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3354
    ^ self , string1 , string2
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3355
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3356
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3357
concatenate:string1 and:string2 and:string3
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3358
    "return the concatenation of myself and the string arguments.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3359
     This is equivalent to self , string1 , string2 , string3
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3360
     - 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
  3361
     is known to be a string."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3362
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3363
    ^ self , string1 , string2 , string3
8040
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3364
!
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3365
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3366
contractAtBeginningTo:maxLen
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3367
    "if the receivers size is less or equal to maxLen, return it.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3368
     Otherwise, return a copy of the receiver, where some characters
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3369
     at the beginning have been replaced by '...' for a total string length
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3370
     of maxLen. Can be used to abbreviate long entries in tables."
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3371
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3372
    |sz|
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3373
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3374
    (sz := self size) <= maxLen ifTrue:[ ^ self ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3375
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3376
    ^ '...' , (self copyFrom:(sz - (maxLen - 4)))
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3377
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3378
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3379
     '12345678901234' contractAtBeginningTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3380
     '123456789012345' contractAtBeginningTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3381
     '1234567890123456' contractAtBeginningTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3382
     'aShortString' contractAtBeginningTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3383
     'aVeryLongNameForAStringThatShouldBeShortened' contractAtBeginningTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3384
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3385
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3386
    "Modified: / 24-10-2006 / 12:32:13 / cg"
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3387
!
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3388
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3389
contractAtEndTo:maxLen
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3390
    "if the receivers size is less or equal to maxLen, return it.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3391
     Otherwise, return a copy of the receiver, where some characters
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3392
     at the end have been replaced by '...' for a total string length
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3393
     of maxLen. Can be used to abbreviate long entries in tables."
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3394
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3395
    |sz|
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3396
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3397
    (sz := self size) <= maxLen ifTrue:[ ^ self ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3398
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3399
    ^ (self copyTo:maxLen-3),'...'
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3400
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3401
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3402
     '12345678901234' contractAtEndTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3403
     '123456789012345' contractAtEndTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3404
     '1234567890123456' contractAtEndTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3405
     'aShortString' contractAtEndTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3406
     'aVeryLongNameForAStringThatShouldBeShortened' contractAtEndTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3407
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3408
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3409
    "Modified: / 24-10-2006 / 12:32:26 / cg"
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3410
!
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3411
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3412
contractLeftTo:maxLen
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3413
    "if the receivers size is less or equal to maxLen, return it.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3414
     Otherwise, return a copy of the receiver, where some characters
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3415
     near the first quarter have been replaced by '...' for a total string length
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3416
     of maxLen.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3417
     Very similar to contractTo:, but better to abbreviate long filename entries,
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3418
     where the right part is of more use than the left."
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3419
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3420
    |sz "{ SmallInteger }"
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3421
     halfSize quarterSize "{ SmallInteger }"
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3422
     leftEnd rightEnd rightStart|
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3423
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3424
    (sz := self size) <= maxLen ifTrue:[ ^ self ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3425
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3426
    halfSize := maxLen // 2.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3427
    quarterSize := maxLen // 4.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3428
    leftEnd := quarterSize-1.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3429
    rightEnd := maxLen - leftEnd - 3.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3430
    rightStart := sz - rightEnd + 1.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3431
    ^ (self copyTo:leftEnd),'...',(self copyFrom:rightStart)
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3432
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3433
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3434
     '12345678901234' contractLeftTo:15
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3435
     '123456789012345' contractLeftTo:15
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3436
     '1234567890123456' contractLeftTo:15
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3437
     'aShortString' contractLeftTo:15
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3438
     'aVeryLongNameForAStringThatShouldBeShortened' contractLeftTo:15
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3439
     '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
  3440
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3441
!
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3442
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3443
contractTo:maxLen
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3444
    "if the receivers size is less or equal to maxLen, return it.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3445
     Otherwise, return a copy of the receiver, where some characters
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3446
     in the middle have been replaced by '...' for a total string length
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3447
     of maxLen. Can be used to abbreviate long entries in tables."
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3448
13362
ee643208df42 changed: #contractTo:
Claus Gittinger <cg@exept.de>
parents: 13344
diff changeset
  3449
    |sz "{ SmallInteger }" leftSize rightSize|
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3450
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3451
    (sz := self size) <= maxLen ifTrue:[ ^ self ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3452
13362
ee643208df42 changed: #contractTo:
Claus Gittinger <cg@exept.de>
parents: 13344
diff changeset
  3453
    rightSize := maxLen // 2.
ee643208df42 changed: #contractTo:
Claus Gittinger <cg@exept.de>
parents: 13344
diff changeset
  3454
    leftSize := maxLen - rightSize.
13822
8c2b90928dd9 contractTo:
Claus Gittinger <cg@exept.de>
parents: 13633
diff changeset
  3455
    leftSize := leftSize - 2.
8c2b90928dd9 contractTo:
Claus Gittinger <cg@exept.de>
parents: 13633
diff changeset
  3456
    rightSize := rightSize - 1.
13362
ee643208df42 changed: #contractTo:
Claus Gittinger <cg@exept.de>
parents: 13344
diff changeset
  3457
    ^ (self copyTo:leftSize),'...',(self copyFrom:(sz+1-rightSize))
ee643208df42 changed: #contractTo:
Claus Gittinger <cg@exept.de>
parents: 13344
diff changeset
  3458
ee643208df42 changed: #contractTo:
Claus Gittinger <cg@exept.de>
parents: 13344
diff changeset
  3459
    "
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3460
     '12345678901234' contractTo:15
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3461
     '123456789012345' contractTo:15
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3462
     '1234567890123456' contractTo:15
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3463
     '12345678901234567' contractTo:15
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3464
     '123456789012345678' contractTo:15
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3465
     'aShortString' contractTo:15
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3466
     'aVeryLongNameForAStringThatShouldBeShortened' contractTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3467
     'C:\Dokumente und Einstellungen\cg\work\bosch\dapas\hw_schnittstellen\DAPAS__HpibDLL.st' contractTo:40
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3468
     ('1234567890123456789012345678901234567' contractTo:30) size
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3469
     ('1234567890123456789012345678901234567' contractTo:29) size
13362
ee643208df42 changed: #contractTo:
Claus Gittinger <cg@exept.de>
parents: 13344
diff changeset
  3470
    "
ee643208df42 changed: #contractTo:
Claus Gittinger <cg@exept.de>
parents: 13344
diff changeset
  3471
13822
8c2b90928dd9 contractTo:
Claus Gittinger <cg@exept.de>
parents: 13633
diff changeset
  3472
    "Modified (comment): / 24-11-2011 / 19:17:46 / cg"
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3473
!
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3474
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3475
copyReplaceString:subString withString:newString
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3476
    "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
  3477
     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
  3478
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3479
    |tmpStream idx idx1|
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3480
11348
366457915f90 care for wide-character strings in copyReplaceStringWithString
Claus Gittinger <cg@exept.de>
parents: 11345
diff changeset
  3481
    tmpStream := CharacterWriteStream on:(self class new).
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3482
    idx := 1.
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3483
    [idx ~~ 0] whileTrue:[
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3484
	idx1 := idx.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3485
	idx := self indexOfSubCollection:subString startingAt:idx.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3486
	idx ~~ 0 ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3487
	    tmpStream nextPutAll:(self copyFrom:idx1 to:idx-1).
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3488
	    tmpStream nextPutAll:newString.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3489
	    idx := idx + subString size
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3490
	]
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3491
    ].
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3492
    tmpStream nextPutAll:(self copyFrom:idx1).
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3493
    ^ tmpStream contents
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3494
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3495
   "
9306
de9b438212b8 comment
Stefan Vogel <sv@exept.de>
parents: 9282
diff changeset
  3496
     '12345678901234567890' copyReplaceString:'123' withString:'OneTwoThree'
de9b438212b8 comment
Stefan Vogel <sv@exept.de>
parents: 9282
diff changeset
  3497
     '12345678901234567890' copyReplaceString:'123' withString:'*'
de9b438212b8 comment
Stefan Vogel <sv@exept.de>
parents: 9282
diff changeset
  3498
     '12345678901234567890' copyReplaceString:'234' withString:'foo'
de9b438212b8 comment
Stefan Vogel <sv@exept.de>
parents: 9282
diff changeset
  3499
de9b438212b8 comment
Stefan Vogel <sv@exept.de>
parents: 9282
diff changeset
  3500
     ('a string with spaces' copyReplaceAll:$  withAll:' foo ')
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3501
	copyReplaceString:'foo' withString:'bar'
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3502
    "
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3503
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3504
    "Modified: / 31-05-1999 / 12:33:59 / cg"
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3505
    "Created: / 12-05-2004 / 12:00:00 / cg"
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3506
!
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3507
8040
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3508
copyWith:aCharacter
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3509
    "return a new string containing the receivers characters
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3510
     and the single new character, aCharacter.
8040
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3511
     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
  3512
     as argument, but equivalent to copy-and-addLast.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3513
     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
  3514
     (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
  3515
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3516
    |sz newString|
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3517
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3518
    aCharacter bitsPerCharacter > self bitsPerCharacter ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3519
	sz := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3520
	newString := aCharacter stringSpecies new:sz + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3521
	newString replaceFrom:1 to:sz with:self startingAt:1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3522
	newString at:sz+1 put:aCharacter.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3523
	^ newString.
8040
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3524
    ].
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3525
    ^ super copyWith:aCharacter
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3526
! !
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3527
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3528
!CharacterArray methodsFor:'displaying'!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3529
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3530
displayOn:aGC x:x y:y from:start to:stop
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3531
    "display the receiver on a GC"
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3532
12171
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  3533
    self displayOn:aGC x:x y:y from:start to:stop opaque:false
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  3534
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  3535
    "Modified: 12.5.1996 / 12:49:33 / cg"
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  3536
!
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  3537
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  3538
displayOn:aGC x:x y:y from:start to:stop opaque:opaque
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  3539
    "display the receiver on a GC"
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  3540
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3541
    "q&d hack"
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3542
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3543
    (start == 1 and:[stop == self size]) ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3544
	self displayOn:aGC x:x y:y opaque:opaque.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3545
    ] ifFalse:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3546
	(self copyFrom:start to:stop) displayOn:aGC x:x y:y opaque:opaque.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3547
    ].
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3548
!
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3549
7082
675482728016 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7022
diff changeset
  3550
displayOn:aGc x:x y:y opaque:opaque
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3551
    "display the receiver in a graphicsContext - this method allows
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3552
     strings to be used like DisplayObjects."
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3553
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3554
    |s|
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3555
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3556
    s := self string.
7082
675482728016 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7022
diff changeset
  3557
    opaque ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3558
	aGc displayOpaqueString:s x:x y:y.
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3559
    ] ifFalse:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3560
	aGc displayString:s x:x y:y.
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3561
    ].
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  3562
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  3563
    "Modified: 11.5.1996 / 14:42:48 / cg"
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  3564
!
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  3565
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3566
displayOpaqueOn:aGC x:x y:y from:start to:stop
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3567
    "display the receiver on a GC"
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3568
12171
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  3569
    self displayOn:aGC x:x y:y from:start to:stop opaque:true
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3570
! !
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3571
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3572
!CharacterArray methodsFor:'emphasis'!
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3573
11632
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3574
actionForAll:aBlock
12326
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  3575
    "change the action block of all characters.
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  3576
     Some widgets use this like a href if clicked onto the text."
11632
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3577
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3578
    ^ self asText actionForAll:aBlock
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3579
!
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3580
5732
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3581
allBold
12326
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  3582
    "return a text object representing the receiver, but all boldified"
5732
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3583
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3584
    "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
  3585
    Text isNil ifTrue:[^ self].
5732
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3586
    ^ self asText allBold
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3587
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3588
    "
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3589
     Transcript showCR:'hello' asText allBold
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3590
     Transcript showCR:'hello' allBold
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3591
    "
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3592
!
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3593
5898
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3594
allItalic
12326
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  3595
    "return a text object representing the receiver, but all in italic"
5898
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3596
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3597
    "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
  3598
    Text isNil ifTrue:[^ self].
5898
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3599
    ^ self asText allItalic
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3600
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3601
    "
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3602
     Transcript showCR:'hello' asText allItalic
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3603
     Transcript showCR:'hello' allItalic
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3604
    "
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3605
!
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3606
11345
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3607
allStrikedOut
12326
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  3608
    "return a text object representing the receiver, but all in strikeout"
11345
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3609
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3610
    "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
  3611
    Text isNil ifTrue:[^ self].
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3612
    ^ self asText allStrikedOut
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3613
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3614
    "
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3615
     Transcript showCR:'hello' asText allStrikedOut
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3616
     Transcript showCR:'hello' allStrikedOut
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3617
    "
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3618
!
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3619
10862
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3620
allUnderlined
12326
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  3621
    "return a text object representing the receiver, but all with underline"
10862
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3622
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3623
    "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
  3624
    Text isNil ifTrue:[^ self].
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3625
    ^ self asText allUnderlined
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3626
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3627
    "
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3628
     Transcript showCR:'hello' asText allUnderlined
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3629
     Transcript showCR:'hello' allUnderlined
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3630
    "
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3631
!
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3632
6228
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3633
colorizeAllWith:aColor
12326
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  3634
    "return a text object representing the receiver, but all colorized"
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  3635
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  3636
    "this test allows for small non-gui apps to be built without libbasic2 (where Text is)"
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  3637
    Text isNil ifTrue:[^ self].
6228
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3638
    ^ self asText colorizeAllWith:aColor
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3639
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3640
    "
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3641
     Transcript showCR:('hello' colorizeAllWith:Color red)
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3642
     Transcript showCR:('world' colorizeAllWith:Color green darkened)
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3643
    "
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3644
!
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3645
12330
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  3646
colorizeAllWith:fgColor on:bgColor
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  3647
    "return a text object representing the receiver, but all colorized with
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  3648
     both fg and background color"
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  3649
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  3650
    "this test allows for small non-gui apps to be built without libbasic2 (where Text is)"
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  3651
    Text isNil ifTrue:[^ self].
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  3652
    ^ self asText colorizeAllWith:fgColor on:bgColor
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  3653
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  3654
    "
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  3655
     Transcript showCR:('hello' colorizeAllWith:Color red on:Color yellow)
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  3656
     Transcript showCR:('world' colorizeAllWith:Color red)
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  3657
    "
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  3658
!
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  3659
1396
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3660
emphasis
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3661
    "return the emphasis.
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3662
     Since characterArrays do not hold any emphasis information,
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3663
     nil (no emphasis) is returned here."
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3664
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3665
    ^ RunArray new:self size withAll:nil
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3666
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3667
    "Created: 14.5.1996 / 13:58:58 / cg"
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3668
!
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3669
6655
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3670
emphasis:emphasisCollection
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3671
    ^ self asText emphasis:emphasisCollection
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3672
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3673
    "
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3674
     Transcript showCR:('hello' emphasis:#(bold bold bold bold bold))
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3675
    "
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3676
!
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3677
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3678
emphasisAt:characterIndex
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3679
    "return the emphasis at some index.
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3680
     Since characterArrays do not hold any emphasis information,
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3681
     nil (no emphasis) is returned here."
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3682
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3683
    ^ nil
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3684
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3685
    "Created: 11.5.1996 / 14:13:27 / cg"
1396
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3686
!
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3687
11632
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3688
emphasisAtPoint:aPoint on:aGC
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3689
    "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
  3690
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3691
    ^ nil
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3692
!
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3693
1396
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3694
emphasisCollection
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3695
    "return the emphasis.
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3696
     Since characterArrays do not hold any emphasis information,
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3697
     nil (no emphasis) is returned here."
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3698
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3699
    ^ RunArray new:(self size)
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3700
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3701
    "Created: 14.5.1996 / 13:58:58 / cg"
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3702
    "Modified: 14.5.1996 / 15:02:29 / cg"
3404
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  3703
!
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  3704
11919
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3705
emphasiseFrom:start to:stop with:newEmphasis
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3706
    "set to the emphasis within some range. return the receiver"
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3707
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3708
    ^ self asText emphasiseFrom:start to:stop with:newEmphasis
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3709
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3710
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3711
     'hello' emphasiseFrom:2 with:#italic
11919
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3712
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3713
     Transcript showCR:('hello' emphasiseFrom:2 with:#italic)
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3714
    "
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3715
!
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3716
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3717
emphasiseFrom:start with:newEmphasis
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3718
    "set to the emphasis within some range. return the receiver"
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3719
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3720
    ^ self emphasiseFrom:start to:(self size) with:newEmphasis
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3721
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3722
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3723
     'hello' emphasiseFrom:2 with:#italic
11919
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3724
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3725
     Transcript showCR:('hello' emphasiseFrom:2 with:#italic)
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3726
    "
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3727
!
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3728
3404
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  3729
emphasizeAllWith:emphasis
12326
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  3730
    "return a text object representing the receiver, but all emphasized"
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  3731
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  3732
    "this test allows for small non-gui apps to be built without libbasic2 (where Text is)"
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  3733
    Text isNil ifTrue:[^ self].
3404
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  3734
    ^ self asText emphasizeAllWith:emphasis
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  3735
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  3736
    "
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  3737
     Transcript showCR:('hello' emphasizeAllWith:#bold)
3599
fea09a812f55 comment
Claus Gittinger <cg@exept.de>
parents: 3578
diff changeset
  3738
     Transcript showCR:('hello' emphasizeAllWith:(#color -> Color red))
fea09a812f55 comment
Claus Gittinger <cg@exept.de>
parents: 3578
diff changeset
  3739
     Transcript showCR:('hello' emphasizeAllWith:(#color -> Color red))
fea09a812f55 comment
Claus Gittinger <cg@exept.de>
parents: 3578
diff changeset
  3740
    "
fea09a812f55 comment
Claus Gittinger <cg@exept.de>
parents: 3578
diff changeset
  3741
fea09a812f55 comment
Claus Gittinger <cg@exept.de>
parents: 3578
diff changeset
  3742
    "Modified: / 17.6.1998 / 12:51:44 / cg"
5097
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3743
!
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3744
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3745
makeSelectorBoldIn:aClass
14050
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  3746
    "the receiver represents some source code for a method in aClass.
5097
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3747
     Change myself to boldify the selector.
14050
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  3748
     Not yet implemented (could easily use the syntaxHighlighter for this ...).
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  3749
     For protocol compatibility with other smalltalks"
5097
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3750
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3751
    ^ self
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3752
14050
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  3753
    "Created: / 13-12-1999 / 21:49:24 / cg"
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  3754
!
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  3755
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  3756
withoutAnyColorEmphasis
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  3757
    "for protocol compatibility with Text"
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  3758
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  3759
    ^ self
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  3760
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  3761
    "Created: / 06-03-2012 / 18:15:38 / cg"
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  3762
!
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  3763
12396
0f75aad3a34c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12343
diff changeset
  3764
withoutBackgroundColorEmphasis
14050
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  3765
    "for protocol compatibility with Text"
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  3766
12396
0f75aad3a34c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12343
diff changeset
  3767
    ^ self
14050
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  3768
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  3769
    "Modified (comment): / 06-03-2012 / 18:14:27 / cg"
12396
0f75aad3a34c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12343
diff changeset
  3770
!
0f75aad3a34c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12343
diff changeset
  3771
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  3772
withoutEmphasis:emphasisToRemove
14050
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  3773
    "for protocol compatibility with Text"
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  3774
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  3775
    ^ self
14050
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  3776
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  3777
    "Modified (comment): / 06-03-2012 / 18:14:29 / cg"
12396
0f75aad3a34c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12343
diff changeset
  3778
!
0f75aad3a34c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12343
diff changeset
  3779
0f75aad3a34c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12343
diff changeset
  3780
withoutForegroundColorEmphasis
14050
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  3781
    "for protocol compatibility with Text"
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  3782
12396
0f75aad3a34c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12343
diff changeset
  3783
    ^ self
14050
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  3784
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  3785
    "Modified (comment): / 06-03-2012 / 18:14:31 / cg"
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3786
! !
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3787
7265
3b007758ff5b method category rename
Claus Gittinger <cg@exept.de>
parents: 7261
diff changeset
  3788
!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
  3789
12767
17d2c7268065 Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12679
diff changeset
  3790
decodeAsLiteralArray
17d2c7268065 Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12679
diff changeset
  3791
    "given a literalEncoding in the receiver,
17d2c7268065 Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12679
diff changeset
  3792
     create & return the corresponding object.
17d2c7268065 Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12679
diff changeset
  3793
     The inverse operation to #literalArrayEncoding."
17d2c7268065 Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12679
diff changeset
  3794
17d2c7268065 Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12679
diff changeset
  3795
    ^ self
17d2c7268065 Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12679
diff changeset
  3796
!
17d2c7268065 Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12679
diff changeset
  3797
991
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
  3798
decodeFrom:encodingSymbol
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3799
    "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
  3800
     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
  3801
ca774158b317 code cleanup (removed old obsolete encoding stuff)
Claus Gittinger <cg@exept.de>
parents: 8102
diff changeset
  3802
    |myEncoding encoder|
7950
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  3803
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  3804
    encodingSymbol isNil ifTrue:[^ self].
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  3805
    myEncoding := self encoding.
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  3806
    encodingSymbol == myEncoding ifTrue:[^ self].
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  3807
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  3808
    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
  3809
    encoder isNil ifTrue:[^ self].
ca774158b317 code cleanup (removed old obsolete encoding stuff)
Claus Gittinger <cg@exept.de>
parents: 8102
diff changeset
  3810
    ^ 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
  3811
!
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
  3812
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3813
encodeFrom:oldEncoding into:newEncoding
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3814
    ^ CharacterEncoder encodeString:self from:oldEncoding into:newEncoding
14405
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  3815
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  3816
    "
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  3817
     'äüö' encodeFrom:#iso8859 into:#utf8
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  3818
     ('äüö' encodeFrom:#iso8859 into:#utf8) encodeFrom:#utf8 into:#unicode
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  3819
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3820
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3821
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3822
rot13
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3823
     "Usenet: from `rotate alphabet 13 places']
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3824
      The simple Caesar-cypher encryption that replaces each English
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3825
      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
  3826
      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
  3827
      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
  3828
      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
  3829
      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
  3830
      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
  3831
      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
  3832
11865
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  3833
    ^ self rot:13
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3834
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3835
    "
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3836
     'hello world' rot13
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3837
     'hello world' rot13 rot13
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3838
    "
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3839
!
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3840
11865
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  3841
rot:n
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  3842
     "Usenet: from `rotate alphabet N places']
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  3843
      The simple Caesar-cypher encryption that replaces each English
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  3844
      letter with the one N places forward or back along the alphabet,
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  3845
      so that 'The butler did it!!' becomes 'Gur ohgyre qvq vg!!' by rot 13
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  3846
      Most Usenet news reading and posting programs include a rot13 feature.
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  3847
      It is used to enclose the text in a sealed wrapper that the reader must choose
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  3848
      to open -- e.g., for posting things that might offend some readers, or spoilers.
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  3849
      A major advantage of rot13 over rot(N) for other N is that it
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  3850
      is self-inverse, so the same code can be used for encoding and decoding."
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  3851
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  3852
    ^ self species
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3853
	streamContents:[:aStream |
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3854
	    self do:[:char |
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3855
		aStream nextPut:(char rot:n) ]]
11865
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  3856
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  3857
    "
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  3858
     'hello world' rot:13
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  3859
     ('hello world' rot:13) rot:13
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  3860
    "
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  3861
!
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  3862
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3863
utf8Decoded
7950
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  3864
    "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
  3865
14592
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  3866
    |in out|
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  3867
14606
1aaaa6d79e54 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14592
diff changeset
  3868
    (self isWideString or:[self contains8BitCharacters]) ifFalse:[
14592
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  3869
        "speed up common case"
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  3870
        ^ self.
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  3871
    ].
11326
11ce7ae19315 changed #utf8Decoded - use CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 11320
diff changeset
  3872
    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
  3873
    in := self readStream.
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3874
    [in atEnd] whileFalse:[
14592
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  3875
        out nextPut:(Character utf8DecodeFrom:in).
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3876
    ].
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3877
    ^ out contents
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3878
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3879
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3880
     #[16rC8 16rA0] asString utf8Decoded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3881
     (Character value:16r220) utf8Encoded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3882
     (Character value:16r220) utf8Encoded utf8Decoded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3883
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3884
     (Character value:16r800) utf8Encoded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3885
     (Character value:16r220) utf8Encoded utf8Decoded
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3886
    "
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3887
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3888
    "test:
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3889
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3890
      |utf8Encoding original readBack|
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3891
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3892
      1 to:16rFFFF do:[:ascii |
14592
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  3893
        original := (Character value:ascii) asString.
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  3894
        utf8Encoding := original utf8Encoded.
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  3895
        readBack := utf8Encoding utf8Decoded.
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  3896
        readBack = original ifFalse:[
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  3897
            self halt
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  3898
        ]
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3899
      ]
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3900
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3901
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3902
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3903
utf8DecodedWithTwoByteCharactersReplacedBy:replacementCharacter
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3904
    "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
  3905
     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
  3906
     and replace them with replacementCharacter"
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3907
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3908
    |in out c|
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3909
8222
f2c454a9a038 replaced '' writeStream by String writeStream
Claus Gittinger <cg@exept.de>
parents: 8124
diff changeset
  3910
    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
  3911
    in := self readStream.
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3912
    [in atEnd] whileFalse:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3913
	c := Character utf8DecodeFrom:in.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3914
	c codePoint > 16rFF ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3915
	    c := replacementCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3916
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3917
	out nextPut:c.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3918
    ].
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3919
    ^ out contents
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3920
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3921
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3922
     (Character value:16r220) utf8Encoded
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3923
	utf8DecodedWithTwoByteCharactersReplacedBy:(Character space)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3924
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3925
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3926
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3927
utf8Encoded
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3928
    "Return my UTF-8 representation as a new String"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3929
14592
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  3930
    |s sz|
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  3931
14606
1aaaa6d79e54 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14592
diff changeset
  3932
    (self isWideString or:[self contains8BitCharacters]) ifFalse:[
14592
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  3933
        "speed up common case"
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  3934
        ^ self.
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  3935
    ].
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  3936
    "We already know, that we need more space, just a rough estimation"
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  3937
    sz := self size.
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  3938
    s := WriteStream on:(String uninitializedNew:(sz+2+(sz//3))).
11320
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  3939
    s nextPutAllUtf8:self.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3940
    ^ s contents
11320
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  3941
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  3942
    "
14592
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  3943
     'abcde1234' utf8Encoded
12925
5c0a9a633ca1 comment/format in: #utf8Encoded
Claus Gittinger <cg@exept.de>
parents: 12912
diff changeset
  3944
     'abcdeäöüß' utf8Encoded
5c0a9a633ca1 comment/format in: #utf8Encoded
Claus Gittinger <cg@exept.de>
parents: 12912
diff changeset
  3945
    "
5c0a9a633ca1 comment/format in: #utf8Encoded
Claus Gittinger <cg@exept.de>
parents: 12912
diff changeset
  3946
5c0a9a633ca1 comment/format in: #utf8Encoded
Claus Gittinger <cg@exept.de>
parents: 12912
diff changeset
  3947
    "Modified: / 11-05-2010 / 19:12:37 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3948
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3949
11345
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3950
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3951
!CharacterArray methodsFor:'matching - glob expressions'!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3952
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3953
compoundMatch:aString
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3954
    "like match, but the receiver may be a compound match pattern,
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  3955
     consisting of multiple simple GLOB patterns, separated by semicolons.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3956
     This is usable with fileName pattern fields.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3957
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3958
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3959
	     NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  3960
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3961
     NOTICE: the receiver is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3962
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3963
    ^self compoundMatch:aString ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3964
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3965
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3966
     'f*' match:'foo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3967
     'b*' match:'foo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3968
     'f*;b*' match:'foo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3969
     'f*;b*' match:'bar'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3970
     'f*;b*' compoundMatch:'foo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3971
     'f*;b*' compoundMatch:'bar'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3972
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3973
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3974
    "Modified: / 30.1.1998 / 11:40:18 / stefan"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3975
    "Modified: / 16.12.1999 / 01:22:08 / cg"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3976
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3977
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3978
compoundMatch:aString ignoreCase:ignoreCase
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3979
    "like match, but the receiver may be a compound match pattern,
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  3980
     consisting of multiple simple GLOB patterns, separated by semicolons.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3981
     This is usable with fileName pattern fields.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3982
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3983
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3984
	     NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  3985
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3986
     NOTICE: the receiver is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3987
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3988
    |matchers|
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3989
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3990
    matchers := self asCollectionOfSubstringsSeparatedBy:$;.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3991
    ^ matchers contains:[:aPattern |
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3992
	aPattern match:aString ignoreCase:ignoreCase escapeCharacter:nil
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3993
      ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3994
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3995
"/    matchers do:[:aPattern |
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3996
"/        (aPattern match:aString ignoreCase:ignoreCase) ifTrue:[^ true].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3997
"/    ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3998
"/    ^ false.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3999
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4000
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4001
     'f*' match:'foo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4002
     'b*' match:'foo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4003
     'f*;b*' match:'foo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4004
     'f*;b*' match:'bar'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4005
     'f*;b*' compoundMatch:'foo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4006
     'f*;b*' compoundMatch:'bar'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4007
     'f*;b*' compoundMatch:'Foo' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4008
     'f*;b*' compoundMatch:'Bar' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4009
     'f*;b*' compoundMatch:'ccc' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4010
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4011
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4012
    "Modified: / 15.4.1997 / 15:50:33 / cg"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4013
    "Modified: / 30.1.1998 / 11:40:18 / stefan"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4014
    "Created: / 16.12.1999 / 01:21:35 / cg"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4015
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4016
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4017
findMatchString:matchString
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4018
    "like findString/indexOfSubCollection, but allowing GLOB match patterns.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4019
     find matchstring; if found, return the index;
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4020
     if not found, return 0.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4021
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4022
     NOTICE: match-meta character interpretation is like in unix-matching,
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4023
	     NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4024
     NOTICE: this GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4025
     NOTICE: the argument is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4026
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4027
    ^ self findMatchString:matchString startingAt:1 ignoreCase:false ifAbsent:0
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4028
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4029
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4030
findMatchString:matchString startingAt:index
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4031
    "like findString, but allowing GLOB match patterns.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4032
     find matchstring, starting at index. if found, return the index;
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4033
     if not found, return 0.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4034
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4035
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4036
	     NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4037
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4038
     NOTICE: the argument is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4039
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4040
    ^ self findMatchString:matchString startingAt:index ignoreCase:false ifAbsent:0
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4041
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4042
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4043
findMatchString:matchString startingAt:index ignoreCase:ignoreCase ifAbsent:exceptionBlock
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4044
    "like findString, but allowing GLOB match patterns.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4045
     find matchstring, starting at index. if found, return the index;
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4046
     if not found, return the result of evaluating exceptionBlock.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4047
     This is a q&d hack - not very efficient.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4048
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4049
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
14420
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4050
             NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4051
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4052
     NOTICE: the argument is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4053
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4054
    |firstChar firstSet
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4055
     startIndex "{ Class: SmallInteger }"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4056
     matchSize  "{ Class: SmallInteger }"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4057
     mySize     "{ Class: SmallInteger }"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4058
     realMatchString lcChar ucChar|
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4059
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4060
    matchSize := matchString size.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4061
    matchSize == 0 ifTrue:[^ index]. "empty string matches"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4062
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4063
    realMatchString := matchString.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4064
    (realMatchString endsWith:$*) ifFalse:[
14420
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4065
        realMatchString := realMatchString , '*'.
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4066
        matchSize := matchSize + 1
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4067
    ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4068
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4069
    mySize := self size.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4070
    firstChar := realMatchString at:1.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4071
    firstChar == self class matchEscapeCharacter ifTrue:[
14420
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4072
        firstChar := realMatchString at:2.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4073
    ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4074
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4075
    firstChar asString includesMatchCharacters ifTrue:[
14420
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4076
        index to:mySize do:[:col |
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4077
            (realMatchString match:self from:col to:mySize ignoreCase:ignoreCase)
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4078
            ifTrue:[^ col]
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4079
        ].
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4080
        ^ exceptionBlock value.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4081
    ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4082
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4083
    lcChar := firstChar asLowercase.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4084
    ucChar := firstChar asUppercase.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4085
    (ignoreCase and:[ lcChar ~= ucChar]) ifTrue:[
14420
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4086
        firstSet := Array with:ucChar with:lcChar.
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4087
        startIndex := self indexOfAny:firstSet startingAt:index.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4088
    ] ifFalse:[
14420
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4089
        startIndex := self indexOf:firstChar startingAt:index.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4090
    ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4091
    [startIndex == 0] whileFalse:[
14420
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4092
        (realMatchString match:self from:startIndex to:mySize ignoreCase:ignoreCase)
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4093
        ifTrue:[^ startIndex].
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4094
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4095
        firstSet notNil ifTrue:[
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4096
            startIndex := self indexOfAny:firstSet startingAt:(startIndex + 1).
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4097
        ] ifFalse:[
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4098
            startIndex := self indexOf:firstChar startingAt:(startIndex + 1).
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4099
        ].
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4100
    ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4101
    ^ exceptionBlock value
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4102
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4103
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4104
     'one two three four' findMatchString:'o[nu]'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4105
     'one two three four' findMatchString:'o[nu]' startingAt:3
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4106
     'one two three four one' findMatchString:'ONE' startingAt:3 ignoreCase:true ifAbsent:0
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4107
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4108
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4109
    "Modified: 13.9.1997 / 06:31:22 / cg"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4110
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4112
includesMatchString:matchString
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4113
    "like includesString, but allowing GLOB match patterns.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4114
     find matchstring; if found, return true, otherwise return false.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4115
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4116
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4117
	     NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4118
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4119
     NOTICE: the argument is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4120
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4121
    ^ (self findMatchString:matchString) ~~ 0
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4122
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4123
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4124
     'hello world' includesMatchString:'h*'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4125
     'hello world' includesMatchString:'h[aeiou]llo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4126
     'hello world' includesMatchString:'wor*'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4127
     'hello world' includesMatchString:'woR*'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4128
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4129
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4130
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4131
includesMatchString:matchString caseSensitive:caseSensitive
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4132
    "like includesString, but allowing GLOB match patterns.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4133
     find matchstring; if found, return true, otherwise return false.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4134
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4135
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4136
	     NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4137
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4138
     NOTICE: the argument is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4139
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4140
    ^ (self findMatchString:matchString startingAt:1 ignoreCase:caseSensitive not ifAbsent:0) ~~ 0
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4141
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4142
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4143
     'hello world' includesMatchString:'h*' caseSensitive:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4144
     'hello world' includesMatchString:'h*' caseSensitive:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4145
     'Hello world' includesMatchString:'h*' caseSensitive:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4146
     'Hello world' includesMatchString:'h*' caseSensitive:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4147
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4148
     'hello world' includesMatchString:'h[aeiou]llo' caseSensitive:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4149
     'hello world' includesMatchString:'h[aeiou]llo' caseSensitive:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4150
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4151
     'hello world' includesMatchString:'wor*' caseSensitive:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4152
     'hello world' includesMatchString:'wor*' caseSensitive:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4153
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4154
     'hello world' includesMatchString:'woR*' caseSensitive:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4155
     'hello world' includesMatchString:'woR*' caseSensitive:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4156
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4157
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4158
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4159
match:aString
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4160
    "return true if aString matches self, where self may contain GLOB meta-match
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4161
     characters $* (to match any string) or $# (to match any character).
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4162
     or [...] to match a set of characters.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4163
     Lower/uppercase are considered different.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4164
     The escape character is the backQuote.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4165
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4166
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4167
	     NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4168
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4169
     NOTICE: the receiver is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4170
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4171
    ^ self match:aString from:1 to:aString size ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4172
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4173
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4174
     '\*f*' match:'f'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4175
     '\*f*' match:'*f'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4176
     '*\*f*' match:'*f'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4177
     '*f*' match:'*f'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4178
     '*ute*' match:'computer'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4179
     '*uter' match:'computer'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4180
     'uter*' match:'computer'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4181
     '*ute*' match:''
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4182
     '[abcd]*' match:'computer'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4183
     '[abcd]*' match:'komputer'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4184
     '*some*compl*ern*' match:'this is some more complicated pattern match'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4185
     '*some*compl*ern*' match:'this is another complicated pattern match'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4186
     '*-hh' match:'anton-h'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4187
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4188
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4189
    "Modified: / 9.6.1998 / 18:50:00 / cg"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4190
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4191
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4192
match:aString escapeCharacter:escape
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4193
    "return true if aString matches self, where self may contain GLOB meta-match
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4194
     characters $* (to match any string) or $# (to match any character).
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4195
     or [...] to match a set of characters.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4196
     Lower/uppercase are considered different.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4197
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4198
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4199
	     NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4200
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4201
     NOTICE: the receiver is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4202
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4203
    ^ self match:aString from:1 to:aString size ignoreCase:false escapeCharacter:escape
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4204
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4205
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4206
     'a\b\c\*' match:'a\b\c\d'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4207
     'a\b\c\*' match:'a\b\c\d' escapeCharacter:nil
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4208
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4209
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4210
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4211
match:aString from:start to:stop ignoreCase:ignoreCase
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4212
    "return true if part of aString matches myself,
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4213
     where self may contain GLOB meta-match
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4214
     characters $* (to match any string) or $# (to match any character)
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4215
     or [...] to match a set of characters.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4216
     If ignoreCase is true, lower/uppercase are considered the same.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4217
     The escape character is the backQuote.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4218
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4219
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4220
	     NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4221
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4222
     NOTICE: the receiver is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4223
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4224
    ^ self
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4225
	match:aString from:start to:stop ignoreCase:ignoreCase
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4226
	escapeCharacter:(self class matchEscapeCharacter)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4227
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4228
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4229
     '*ute*' match:'12345COMPUTER' from:1 to:5 ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4230
     '*ute*' match:'12345COMPUTER' from:6 to:13 ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4231
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4232
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4233
    "Modified: / 10.11.1998 / 21:43:46 / cg"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4234
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4235
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4236
match:aString from:start to:stop ignoreCase:ignoreCase escapeCharacter:escape
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4237
    "return true if part of aString matches myself,
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4238
     where self may contain GLOB meta-match
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4239
     characters $* (to match any string) or $# (to match any character)
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4240
     or [...] to match a set of characters.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4241
     If ignoreCase is true, lower/uppercase are considered the same.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4242
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4243
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4244
	     NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4245
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4246
     NOTICE: the receiver is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4247
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4248
    |matchScanArray|
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4249
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4250
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4251
     keep the matchScanArray from the most recent match -
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4252
     avoids parsing the pattern over-and over if multiple searches
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4253
     are done with the same pattern.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4254
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4255
    (PreviousMatch notNil
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4256
    and:[PreviousMatch key = self]) ifTrue:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4257
	matchScanArray := PreviousMatch value
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4258
    ] ifFalse:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4259
	matchScanArray := self class matchScanArrayFrom:self escapeCharacter:escape.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4260
	matchScanArray isNil ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4261
	    'CharacterArray [info]: invalid matchpattern:''' infoPrint. self infoPrint. ''' comparing for equality.' infoPrintCR.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4262
	    ^ self = aString
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4263
"/            ^ false
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4264
	].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4265
	PreviousMatch := self -> matchScanArray.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4266
    ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4267
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4268
    ^ self class
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4269
	matchScan:matchScanArray
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4270
	from:1 to:matchScanArray size
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4271
	with:aString
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4272
	from:start to:stop
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4273
	ignoreCase:ignoreCase
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4274
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4275
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4276
     '*ute*' match:'12345COMPUTER' from:1 to:5 ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4277
     '*ute*' match:'12345COMPUTER' from:6 to:13 ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4278
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4279
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4280
    "Modified: / 10.11.1998 / 21:43:46 / cg"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4281
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4282
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4283
match:aString ignoreCase:ignoreCase
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4284
    "return true if aString matches self, where self may contain GLOB meta-match
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4285
     characters $* (to match any string) or $# (to match any character)
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4286
     or [...] to match a set of characters.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4287
     If ignoreCase is true, lower/uppercase are considered the same.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4288
     The escape character is the backQuote.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4289
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4290
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4291
	     NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4292
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4293
     NOTICE: the receiver is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4294
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4295
    ^ self match:aString from:1 to:aString size ignoreCase:ignoreCase
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4296
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4297
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4298
     '*ute*' match:'COMPUTER' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4299
     '*uter' match:'COMPUTER' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4300
     '[abcd]*' match:'computer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4301
     '[abcd]*' match:'Computer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4302
     '[a-k]*' match:'komputer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4303
     '[a-k]*' match:'zomputer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4304
     '[a-k]*' match:'Komputer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4305
     '[a-k]*' match:'Komputer' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4306
     '*some*compl*ern*' match:'this is some more complicated pattern match' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4307
     '*some*compl*ern*' match:'this is another complicated pattern match' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4308
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4309
     Time millisecondsToRun:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4310
	Symbol allInstancesDo:[:sym |
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4311
	    '[ab]*' match:sym ignoreCase:false
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4312
	]
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4313
     ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4314
     Time millisecondsToRun:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4315
	Symbol allInstancesDo:[:sym |
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4316
	    '*at:*' match:sym ignoreCase:false
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4317
	]
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4318
     ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4319
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4320
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4321
    "Modified: 2.4.1997 / 17:28:58 / cg"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4322
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4323
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4324
match:aString ignoreCase:ignoreCase escapeCharacter:escape
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4325
    "return true if aString matches self, where self may contain GLOB meta-match
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4326
     characters $* (to match any string) or $# (to match any character)
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4327
     or [...] to match a set of characters.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4328
     If ignoreCase is true, lower/uppercase are considered the same.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4329
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4330
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4331
	     NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4332
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4333
     NOTICE: the receiver is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4334
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4335
    ^ self match:aString from:1 to:aString size ignoreCase:ignoreCase escapeCharacter:escape
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4336
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4337
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4338
     '*ute*' match:'COMPUTER' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4339
     '*uter' match:'COMPUTER' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4340
     '[abcd]*' match:'computer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4341
     '[abcd]*' match:'Computer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4342
     '[a-k]*' match:'komputer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4343
     '[a-k]*' match:'zomputer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4344
     '[a-k]*' match:'Komputer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4345
     '[a-k]*' match:'Komputer' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4346
     '*some*compl*ern*' match:'this is some more complicated pattern match' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4347
     '*some*compl*ern*' match:'this is another complicated pattern match' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4348
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4349
     Time millisecondsToRun:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4350
	Symbol allInstancesDo:[:sym |
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4351
	    '[ab]*' match:sym ignoreCase:false
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4352
	]
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4353
     ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4354
     Time millisecondsToRun:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4355
	Symbol allInstancesDo:[:sym |
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4356
	    '*at:*' match:sym ignoreCase:false
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4357
	]
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4358
     ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4359
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4360
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4361
    "Modified: 2.4.1997 / 17:28:58 / cg"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4362
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4363
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4364
matches:aPatternString
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4365
    "return true if the receiver matches aString, where aPatternString may contain GLOB meta-match
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4366
     characters $* (to match any string) or $# (to match any character).
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4367
     or [...] to match a set of characters.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4368
     Lower/uppercase are considered different.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4369
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4370
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4371
	     NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4372
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4373
     NOTICE: the receiver is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4374
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4375
    ^ aPatternString match:self
14054
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  4376
!
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  4377
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  4378
matches:aPatternString ignoreCase:ignoreCase
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  4379
    "return true if the receiver matches aString, where aPatternString may contain GLOB meta-match
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  4380
     characters $* (to match any string) or $# (to match any character).
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  4381
     or [...] to match a set of characters.
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  4382
     Lower/uppercase are considered different.
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  4383
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  4384
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  4385
             NOT the ST-80 meaning.
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  4386
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  4387
     NOTICE: the receiver is the match pattern"
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  4388
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  4389
    ^ aPatternString match:self ignoreCase:ignoreCase
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  4390
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  4391
    "Created: / 08-03-2012 / 03:11:11 / cg"
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4392
! !
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4393
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4394
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4395
!CharacterArray methodsFor:'padded copying'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4396
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4397
centerPaddedTo:newSize
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4398
     "return a new string consisting of the receivers characters,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4399
     plus spaces up to length and center the receivers characters in
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4400
     the resulting string.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4401
     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
  4402
     the original receiver is returned unchanged."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4403
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4404
     ^ self centerPaddedTo:newSize with:(Character space)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4405
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4406
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4407
     'foo' centerPaddedTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4408
     123 printString centerPaddedTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4409
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4410
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4411
    "Created: 25.11.1995 / 10:53:57 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4412
!
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4413
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4414
centerPaddedTo:size with:padCharacter
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4415
    "return a new string of length size, which contains the receiver
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4416
     centered (i.e. padded on both sides).
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4417
     Characters are filled with padCharacter.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4418
     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
  4419
     the original receiver is returned unchanged."
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4420
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4421
    |len s|
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4422
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4423
    len := self size.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4424
    (len < size) ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4425
	s := self species new:size withAll:padCharacter.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4426
	s replaceFrom:(size - len) // 2  + 1 with:self.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4427
	^ s
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4428
    ]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4429
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4430
    "
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4431
     'foo' centerPaddedTo:11 with:$.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4432
     'fooBar' centerPaddedTo:5 with:$.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4433
     123 printString centerPaddedTo:10 with:$.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4434
     (' ' , 123 printString) centerPaddedTo:10 with:$.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4435
     (Float pi printString) centerPaddedTo:15 with:(Character space)
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4436
     (Float pi printString) centerPaddedTo:15 with:$-
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4437
     (' ' , Float pi class name) centerPaddedTo:15 with:$.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4438
    "
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4439
!
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4440
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4441
decimalPaddedTo:size and:afterPeriod at:decimalCharacter
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4442
    "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
  4443
     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
  4444
     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
  4445
     to be padded).
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4446
     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
  4447
     the original receiver is returned unchanged.
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4448
     (sounds complicated ? -> see examples below)."
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4449
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4450
    ^ self
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4451
	decimalPaddedTo:size
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4452
	and:afterPeriod
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4453
	at:decimalCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4454
	withLeft:(Character space)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4455
	right:$0
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4456
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4457
    "
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4458
     '123' decimalPaddedTo:10 and:3 at:$.      -> '   123    '
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4459
     '123' decimalPaddedTo:10 and:3 at:$.      -> '   123.000'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4460
     '123.' decimalPaddedTo:10 and:3 at:$.     -> '   123.000'
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4461
     '123.1' decimalPaddedTo:10 and:3 at:$.    -> '   123.100'
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4462
     '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
  4463
     '123.123' decimalPaddedTo:10 and:3 at:$.  -> '   123.123'
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4464
    "
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4465
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4466
    "Created: 23.12.1995 / 13:11:52 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4467
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4468
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4469
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
  4470
    "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
  4471
     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
  4472
     of the period.
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4473
     Characters on the left are filled with leftPadChar.
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4474
     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
  4475
     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
  4476
     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
  4477
     the original receiver is returned unchanged.
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4478
     (sounds complicated ? -> see examples below)."
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4479
5230
655c21ffe6cc care for negative size of rest-string when decimalPadding
Claus Gittinger <cg@exept.de>
parents: 5221
diff changeset
  4480
    |s idx n rest|
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4481
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4482
    idx := self indexOf:decimalCharacter.
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4483
    idx == 0 ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4484
	"/
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4485
	"/ 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
  4486
	"/
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4487
	rightPadChar isNil ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4488
	    s := self , (self species new:afterPeriod + 1 withAll:leftPadChar)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4489
	] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4490
	    s:= self , decimalCharacter asString , (self species new:afterPeriod withAll:rightPadChar).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4491
	].
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4492
    ] ifFalse:[
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4493
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4494
	"/ the number of after-decimalPoint characters
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4495
	n := self size - idx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4496
	rest := afterPeriod - n.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4497
	rest > 0 ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4498
	    s := (self species new:rest withAll:(rightPadChar ? leftPadChar)).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4499
	] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4500
	    s := ''
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4501
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4502
	s := self , s.
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4503
    ].
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4504
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4505
    ^ s leftPaddedTo:size with:leftPadChar
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4506
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4507
    "
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4508
     '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
  4509
     '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
  4510
     '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
  4511
     '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
  4512
     '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
  4513
     '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
  4514
    "
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4515
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4516
    "Modified: 23.12.1995 / 13:08:18 / cg"
9192
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
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4519
leftPaddedTo:size
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4520
    "return a new string of length size, which contains the receiver
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4521
     right-adjusted (i.e. padded on the left).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4522
     Characters on the left are filled with spaces.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4523
     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
  4524
     the original receiver is returned unchanged."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4525
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4526
    ^ self leftPaddedTo:size with:(Character space)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4527
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4528
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4529
     'foo' leftPaddedTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4530
     'fooBar' leftPaddedTo:5
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4531
     123 printString leftPaddedTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4532
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4533
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4534
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4535
paddedTo:newSize
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4536
     "return a new string consisting of the receivers characters,
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4537
     plus spaces up to length.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4538
     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
  4539
     the original receiver is returned unchanged."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4540
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4541
     ^ self paddedTo:newSize with:(Character space)
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4542
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4543
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4544
     'foo' paddedTo:10
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4545
     123 printString paddedTo:10
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4546
    "
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  4547
! !
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  4548
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4549
!CharacterArray methodsFor:'printing & storing'!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4550
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4551
article
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4552
    "return an article string for the receiver."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4553
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4554
    |firstChar|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4555
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4556
    firstChar := (self at:1) asLowercase.
5848
ef81d77ca1ad UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5843
diff changeset
  4557
    ((firstChar isVowel and:[firstChar ~~ $u]) or:[firstChar == $x]) ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4558
	^ 'an'
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4559
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4560
    ^ 'a'
5848
ef81d77ca1ad UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5843
diff changeset
  4561
ef81d77ca1ad UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5843
diff changeset
  4562
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4563
	'uboot' article.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4564
	'xmas' article.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4565
	'alarm' article.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4566
	'baby' article.
5848
ef81d77ca1ad UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5843
diff changeset
  4567
    "
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4568
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4569
8049
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  4570
basicStoreString
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  4571
    "return a String for storing myself"
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  4572
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  4573
    |s n index|
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  4574
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  4575
    n := self occurrencesOf:$'.
11320
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  4576
    n ~~ 0 ifTrue:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4577
	s := self class new:(n + 2 + self size).
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4578
	s at:1 put:$'.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4579
	index := 2.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4580
	self do:[:thisChar |
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4581
	    (thisChar == $') ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4582
		s at:index put:thisChar.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4583
		index := index + 1.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4584
	    ].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4585
	    s at:index put:thisChar.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4586
	    index := index + 1.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4587
	].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4588
	s at:index put:$'.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4589
	^ s
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4590
    ].
11320
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  4591
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4592
    ^ '''' , self , ''''
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4593
!
8049
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  4594
11774
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  4595
displayOn:aGCOrStream
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  4596
    "Compatibility
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  4597
     append a printed desription on some stream (Dolphin,  Squeak)
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  4598
     OR:
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  4599
     display the receiver in a graphicsContext at 0@0 (ST80).
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  4600
     This method allows for any object to be displayed in some view
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  4601
     (although the fallBack is to display its printString ...)"
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  4602
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  4603
    "/ what a kludge - Dolphin and Squeak mean: printOn: a stream;
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  4604
    "/ ST/X (and some old ST80's) mean: draw-yourself on a GC.
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  4605
    (aGCOrStream isStream or:[aGCOrStream == Transcript]) ifTrue:[
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  4606
	self storeOn:aGCOrStream.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  4607
	^ self
11774
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  4608
    ].
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  4609
    ^ super displayOn:aGCOrStream
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  4610
!
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  4611
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4612
printOn:aStream
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4613
    "print the receiver on aStream"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4614
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4615
    aStream nextPutAll:self
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4616
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4617
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4618
printString
13079
111e7e456648 Implement display with #displayOn: instead of #displayString
Stefan Vogel <sv@exept.de>
parents: 13073
diff changeset
  4619
    "return a string for printing - that's myself"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4620
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4621
    ^ self
3578
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4622
!
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4623
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4624
printWithQuotesDoubledOn:aStream
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4625
    "put the raw storeString of myself on aStream"
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4626
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4627
    self do:[:thisChar |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4628
	(thisChar == $') ifTrue:[aStream nextPut:thisChar].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4629
	aStream nextPut:thisChar
3578
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4630
    ]
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4631
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4632
    "Modified: / 15.6.1998 / 17:21:17 / cg"
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4633
    "Created: / 15.6.1998 / 17:22:13 / cg"
12171
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  4634
!
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  4635
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  4636
printfWith:arg1 with:arg2 with:arg3 with:arg4 with:arg5
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  4637
    "Format and print the receiver with <argI> formatted in C style,
12171
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  4638
     as specified in the Unix C-language manual page for printf(3).
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  4639
     Return the resulting string."
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  4640
12171
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  4641
    ^ self printf:(Array with:arg1 with:arg2 with:arg3 with:arg4 with:arg5)
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  4642
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  4643
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  4644
     Transcript showCR:('%d %05x %08o %b' printfWith:123 with:234 with:345 with:123)
12171
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  4645
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4646
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4647
11955
1230c6953d49 comments
Claus Gittinger <cg@exept.de>
parents: 11919
diff changeset
  4648
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4649
!CharacterArray methodsFor:'queries'!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4650
4429
564b0fd9168e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4410
diff changeset
  4651
bitsPerCharacter
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4652
    "return the underlying strings bitsPerCharacter
4429
564b0fd9168e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4410
diff changeset
  4653
     (i.e. is it a regular String or a TwoByteString)"
564b0fd9168e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4410
diff changeset
  4654
8457
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4655
    |string max|
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4656
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4657
    (string := self string) ~~ self ifTrue:[
14555
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  4658
        ^ string bitsPerCharacter
8457
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4659
    ].
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4660
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4661
    max := 8.
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4662
    self do:[:eachCharacter |
14555
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  4663
        max := max max:(eachCharacter bitsPerCharacter)
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4664
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4665
    ^ max
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4666
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4667
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4668
     'hello' bitsPerCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4669
     'hello' asText allBold bitsPerCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4670
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4671
!
8457
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4672
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4673
contains8BitCharacters
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4674
    "return true, if the underlying string contains 8BitCharacters (or widers)
8457
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4675
     (i.e. if it is non-ascii)"
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4676
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4677
    |string|
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4678
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4679
    (string := self string) ~~ self ifTrue:[
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4680
	^ string contains8BitCharacters
8457
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4681
    ].
8900
8b669296f3eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8899
diff changeset
  4682
    ^ self contains:[:aCharacter | aCharacter codePoint > 16r7F ].
8457
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4683
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4684
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4685
     'hello' contains8BitCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4686
     'hello' asText allBold contains8BitCharacters
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  4687
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4688
!
4429
564b0fd9168e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4410
diff changeset
  4689
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4690
continuesWith:aString startingAt:startIndex
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4691
    "return true, if the receiver beginning at startIndex
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4692
     contains the characters in aString."
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4693
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4694
    |sz  "{Class: SmallInteger }"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4695
     idx "{Class: SmallInteger }"|
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4696
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4697
    sz := aString size.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4698
    idx := startIndex.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4699
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4700
    1 to:sz do:[:i |
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4701
	(self at:idx) ~~ (aString at:i) ifTrue:[^ false].
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4702
	idx := idx + 1
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4703
    ].
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4704
    ^ true
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4705
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4706
    "
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4707
     'hello world' continuesWith:'world' startingAt:6
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4708
     'hello world' continuesWith:'world' startingAt:7
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4709
    "
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4710
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4711
    "Created: 12.5.1996 / 15:46:40 / cg"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4712
    "Modified: 26.7.1996 / 19:08:36 / cg"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4713
!
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4714
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4715
countWords
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4716
    "return the number of words, which are separated by separators"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4717
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4718
    |tally "{ Class: SmallInteger }"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4719
     start "{ Class: SmallInteger }"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4720
     mySize "{ Class: SmallInteger }"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4721
     stop ch|
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4722
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4723
    tally := 0.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4724
    start := 1.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4725
    mySize := self size.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4726
    [start <= mySize] whileTrue:[
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4727
	ch := self at:start.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4728
	ch isSeparator ifTrue:[
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4729
	    start := start + 1
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4730
	] ifFalse:[
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4731
	    stop := self indexOfSeparatorStartingAt:start.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4732
	    (stop == 0) ifTrue:[
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4733
		stop := mySize + 1
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4734
	    ].
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4735
	    tally := tally + 1.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4736
	    start := stop
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4737
	]
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4738
    ].
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4739
    ^ tally
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4740
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4741
    "
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4742
     'hello world isnt this nice' countWords'
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4743
    "
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4744
!
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4745
11788
eea1835a1b7b added #defaultElement
Stefan Vogel <sv@exept.de>
parents: 11774
diff changeset
  4746
defaultElement
eea1835a1b7b added #defaultElement
Stefan Vogel <sv@exept.de>
parents: 11774
diff changeset
  4747
    ^ Character space
eea1835a1b7b added #defaultElement
Stefan Vogel <sv@exept.de>
parents: 11774
diff changeset
  4748
!
eea1835a1b7b added #defaultElement
Stefan Vogel <sv@exept.de>
parents: 11774
diff changeset
  4749
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4750
encoding
1311
367f740d21e7 commentary
Claus Gittinger <cg@exept.de>
parents: 1308
diff changeset
  4751
    "return the strings encoding, as a symbol.
7982
0412a26c4621 encoding now unicode
Claus Gittinger <cg@exept.de>
parents: 7977
diff changeset
  4752
     Here, by default, we assume unicode-encoding.
0412a26c4621 encoding now unicode
Claus Gittinger <cg@exept.de>
parents: 7977
diff changeset
  4753
     Notice, that iso8859-1 is a true subset of unicode,
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4754
     and that singleByteStrings are therefore both unicode AND
7982
0412a26c4621 encoding now unicode
Claus Gittinger <cg@exept.de>
parents: 7977
diff changeset
  4755
     8859-1 encoded."
0412a26c4621 encoding now unicode
Claus Gittinger <cg@exept.de>
parents: 7977
diff changeset
  4756
14168
fb2ae640ab02 formatting
Stefan Vogel <sv@exept.de>
parents: 14150
diff changeset
  4757
    ^ #unicode
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4758
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4759
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4760
hasChangeOfEmphasis
14405
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  4761
    "return true, if the receiver contains non-empty emphasis information
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  4762
     i.e. any non-normal (=emphasized) characters"
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  4763
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4764
    ^ false
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4765
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  4766
    "Created: 12.5.1996 / 12:31:39 / cg"
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4767
!
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4768
7995
8ddbb403d67b +hasIcon and hasImage for LabelAndIcon compatibility
Claus Gittinger <cg@exept.de>
parents: 7991
diff changeset
  4769
hasIcon
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  4770
    "for LabelAndIcon compatibility"
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  4771
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4772
    ^ false
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4773
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4774
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4775
hasImage
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4776
    "for LabelAndIcon compatibility"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4777
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4778
    ^ false
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4779
!
7995
8ddbb403d67b +hasIcon and hasImage for LabelAndIcon compatibility
Claus Gittinger <cg@exept.de>
parents: 7991
diff changeset
  4780
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4781
heightOn:aGC
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4782
    "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
  4783
6528
cf4e93b8104b #on: -> #onDevice
Claus Gittinger <cg@exept.de>
parents: 6523
diff changeset
  4784
    ^ (aGC font onDevice:aGC device) heightOf:self
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4785
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4786
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4787
     'hello world' heightOn:(View new)
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4788
    "
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4789
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4790
    "Created: 12.5.1996 / 20:09:29 / cg"
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4791
    "Modified: 12.5.1996 / 20:32:05 / cg"
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4792
!
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4793
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  4794
isLowercaseFirst
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  4795
    "return true, if the first character is a lowercase character."
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  4796
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  4797
    ^ self size ~~ 0 and:[ self first isLowercase ]
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  4798
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  4799
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  4800
     'helloWorld' isLowercaseFirst
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  4801
     'HelloWorld' isLowercaseFirst
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  4802
    "
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  4803
!
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  4804
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  4805
isUppercaseFirst
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  4806
    "return true, if the first character is an uppercase character."
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  4807
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  4808
    ^ self size ~~ 0 and:[ self first isUppercase ]
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  4809
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  4810
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  4811
     'helloWorld' isUppercaseFirst
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  4812
     'HelloWorld' isUppercaseFirst
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  4813
    "
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  4814
!
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  4815
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4816
knownAsSymbol
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4817
    "for now, only single character strings are allowed as symbols.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4818
     This method is redefined in String."
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4819
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4820
    ^ false
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4821
!
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4822
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4823
leftIndent
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4824
    "if the receiver starts with spaces, return the number of spaces
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4825
     at the left - otherwise, return 0.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4826
     If the receiver consists of spaces only, return the receivers size."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4827
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4828
    |index "{Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4829
     end   "{Class: SmallInteger }"|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4830
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4831
    index := 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4832
    end := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4833
    [index <= end] whileTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4834
	(self at:index) isSeparator ifFalse:[^ index - 1].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4835
	index := index + 1
8350
d9aaa0c937cb +isValidSmalltalkIdentifier
Claus Gittinger <cg@exept.de>
parents: 8347
diff changeset
  4836
    ].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4837
    ^ end
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4838
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4839
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4840
     '    hello' leftIndent
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4841
     'foo      ' leftIndent
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4842
     '         ' leftIndent
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4843
    "
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4844
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4845
    "Modified: 20.4.1996 / 19:28:43 / cg"
8350
d9aaa0c937cb +isValidSmalltalkIdentifier
Claus Gittinger <cg@exept.de>
parents: 8347
diff changeset
  4846
!
d9aaa0c937cb +isValidSmalltalkIdentifier
Claus Gittinger <cg@exept.de>
parents: 8347
diff changeset
  4847
10437
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4848
nameSpaceSelectorParts
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4849
    "Answer the namespace and baseSelector parts of a namespace selector.
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4850
     Namespace selectors are those generated by sends from a method in a different
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4851
     namespace; they are prefixed by ':'<ns>'::'.
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4852
     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
  4853
     Experimental"
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4854
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4855
    |nsPart selPart idx|
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4856
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4857
    (self at:1) == $: ifFalse:[^ Array with:'' with:self].
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4858
    idx := self indexOf:$: startingAt:3.
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4859
    idx == 0 ifTrue:[^ Array with:'' with:self].
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4860
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4861
    (idx+2 > self size) ifTrue:[^ Array with:'' with:self].
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4862
    (self at:idx+1) == $: ifFalse:[^ Array with:'' with:self].
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4863
    nsPart := self copyFrom:2 to:idx-1.
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4864
    selPart := self copyFrom:idx+2.
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4865
    ^ Array with:nsPart with:selPart
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4866
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4867
    "test:
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4868
     self assert:('+' nameSpaceSelectorParts) = #('' '+').
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4869
     self assert:(':+' nameSpaceSelectorParts) = #('' ':+').
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4870
     self assert:(':Foo:+' nameSpaceSelectorParts) = #('' ':Foo:+').
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4871
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4872
     self assert:(':Foo::+' nameSpaceSelectorParts) = #('Foo' '+').
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4873
     self assert:(':Foo::bar:baz:' nameSpaceSelectorParts) = #('Foo' 'bar:baz:').
10437
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4874
    "
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4875
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4876
    "Created: / 05-03-2007 / 17:16:58 / cg"
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4877
    "Modified: / 06-03-2007 / 11:51:15 / cg"
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4878
!
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4879
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4880
stringSpecies
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4881
    "return the underlying strings bitsPerCharacter
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  4882
     (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
  4883
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  4884
    |string|
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  4885
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  4886
    (string := self string) == self ifTrue:[^ self class].
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  4887
    ^ string stringSpecies
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  4888
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  4889
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4890
     'hello' stringSpecies
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4891
     'hello' asText allBold stringSpecies
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4892
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4893
!
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  4894
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4895
widthFrom:startIndex to:endIndex on:aGC
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4896
    "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
  4897
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4898
    ^ (aGC font onDevice:aGC device) widthOf:self from:startIndex to:endIndex
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4899
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4900
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4901
     'hello world' widthFrom:1 to:5 on:(View new)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4902
     'hello' widthOn:(View new)
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4903
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4904
!
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4905
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4906
widthOn:aGC
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4907
    "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
  4908
6528
cf4e93b8104b #on: -> #onDevice
Claus Gittinger <cg@exept.de>
parents: 6523
diff changeset
  4909
    ^ (aGC font onDevice:aGC device) widthOf:self
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4910
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4911
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4912
     'hello world' widthOn:(View new)
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4913
    "
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4914
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4915
    "Created: 12.5.1996 / 20:09:29 / cg"
2554
309ee6707322 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2551
diff changeset
  4916
    "Modified: 17.4.1997 / 12:50:23 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4917
! !
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4918
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4919
!CharacterArray methodsFor:'special string converting'!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4920
14768
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4921
expandPlaceholders:escapeCharacter with:argArrayOrDictionary
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4922
    "this is the generic version of the old %-escaping method, allowing for an arbitrary
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4923
     escape character to be used (typically $$ or $% are effectively used).
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4924
     Return a copy of the receiver, where all %i escapes are
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4925
     replaced by corresponding arguments' printStrings from the argArrayOrDictionary.
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4926
     I.e. 'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this') results
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4927
     in the new string 'hello world; how is this'.
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4928
     As an extension, the argument may also be a dictionary, providing
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4929
     values for symbolic keys.
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4930
     In this case, %a .. %z and %(...) are also allowed.
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4931
     (%1..%9 require a numeric key in the dictionary, however)
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4932
     To get a '%' character, use a '%%'-escape.
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4933
     To get an integer-indexed placeHolder followed by another digit,
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4934
     or an index > 9, you must use %(digit).
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4935
     See also bindWith:... for VisualAge compatibility."
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4936
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4937
    |stream|
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4938
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4939
    stream := (TextStream ? WriteStream) on:(self species new:self size + 20).
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4940
    self expandPlaceholders:escapeCharacter with:argArrayOrDictionary on:stream.
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4941
    ^ stream contents.
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4942
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4943
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4944
    "
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4945
     'hello %1' expandPlaceholdersWith:#('world')
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4946
     'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this')
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4947
     'hello %2; how is %1' expandPlaceholdersWith:#('world' 'this')
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4948
     '%1 plus %2 gives %3 ' expandPlaceholdersWith:#(4 5 9)
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4949
     '%%(1)0 gives %(1)0' expandPlaceholdersWith:#(123)
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4950
     '%%10 gives %10' expandPlaceholdersWith:#(123)
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4951
     '%%(10) gives %(10)' expandPlaceholdersWith:#(123)
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4952
     '%test gives %1' expandPlaceholdersWith:#(123)
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4953
     'bla %1 bla' expandPlaceholdersWith:{ 'hello' allBold }
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4954
     'bla %1 bla' expandPlaceholdersWith:{ 'hello' }
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4955
    "
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4956
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4957
    "
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4958
     |dict|
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4959
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4960
     dict := Dictionary new.
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4961
     dict at:1 put:'one'.
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4962
     dict at:$a put:'AAAAA'.
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4963
     dict at:$b put:[ Time now ].
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4964
     dict at:'foo' put:[ Date today ].
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4965
     'hello $1 %a $b %(foo)' expandPlaceholders:$$ with:dict       
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4966
    "
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4967
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4968
    "Modified: 1.7.1997 / 00:53:24 / cg"
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4969
!
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  4970
14765
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  4971
expandPlaceholders:escapeCharacter with:argArrayOrDictionary on:aStream
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  4972
    "this is the generic version of the old %-escaping method, allowing for an arbitrary
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  4973
     escape character to be used (typically $$ or $% are effectively used).
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  4974
     Write the receiver to aStream, where all %i escapes are
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  4975
     replaced by corresponding arguments' printStrings from the argArrayOrDictionary.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  4976
     I.e. 'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this') results
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  4977
     in the new string 'hello world; how is this'.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  4978
     As an extension, the argument may also be a dictionary, providing
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  4979
     values for symbolic keys.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  4980
     In this case, %a .. %z and %(...) are also allowed.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  4981
     (%1..%9 require a numeric key in the dictionary, however)
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  4982
     To get a '%' character, use a '%%'-escape.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  4983
     To get an integer-indexed placeHolder followed by another digit,
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  4984
     or an index > 9, you must use %(digit).
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  4985
     See also bindWith:... for VisualAge compatibility.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  4986
     Use %<cr> to insert a CR and %<tab> to insert a TAB."
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  4987
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  4988
    |next v key
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  4989
     idx   "{ SmallInteger }"
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  4990
     idx2  "{ SmallInteger }"
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  4991
     start "{ SmallInteger }"
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  4992
     stop  "{ SmallInteger }"|
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  4993
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  4994
    stop := self size.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  4995
    start := 1.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  4996
    [start <= stop] whileTrue:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  4997
        idx := self indexOf:escapeCharacter startingAt:start.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  4998
        (idx == 0 or:[idx == stop]) ifTrue:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  4999
            aStream nextPutAll:self startingAt:start to:stop.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5000
            ^ self.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5001
        ].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5002
        "found an escapeCharacter"
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5003
        aStream nextPutAll:self startingAt:start to:(idx - 1).
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5004
        next := self at:(idx + 1).
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5005
        (next == escapeCharacter) ifTrue:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5006
            aStream nextPut:escapeCharacter.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5007
        ] ifFalse:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5008
            next == $< ifTrue:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5009
                idx2 := self indexOf:$> startingAt:idx+2.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5010
                key := self copyFrom:idx+2 to:idx2-1.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5011
                idx := idx2 - 1.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5012
                key := key asSymbolIfInterned.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5013
                (#(cr tab nl return lf ff null) includesIdentical:key) ifTrue:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5014
                    aStream nextPut:(Character perform:key).
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5015
                ].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5016
            ] ifFalse:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5017
                next isDigit ifTrue:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5018
                    v := argArrayOrDictionary at:(next digitValue) ifAbsent:''
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5019
                ] ifFalse:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5020
                    next == $( ifTrue:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5021
                        idx2 := self indexOf:$) startingAt:idx+2.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5022
                        key := self copyFrom:idx+2 to:idx2-1.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5023
                        idx := idx2 - 1.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5024
                        (argArrayOrDictionary includesKey:key) ifTrue:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5025
                            v := argArrayOrDictionary at:key
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5026
                        ] ifFalse:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5027
                            key := key asSymbolIfInterned ? key.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5028
                            (argArrayOrDictionary includesKey:key) ifTrue:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5029
                                v := argArrayOrDictionary at:key
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5030
                            ] ifFalse:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5031
                                (key size == 1 and:[ argArrayOrDictionary includesKey:(key at:1)]) ifTrue:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5032
                                    v := argArrayOrDictionary at:(key at:1)
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5033
                                ] ifFalse:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5034
                                    key isNumeric ifTrue:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5035
                                        key := Integer readFrom:key onError:nil.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5036
                                    ].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5037
                                    v := argArrayOrDictionary at:key ifAbsent:''
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5038
                                ]
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5039
                            ].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5040
                        ].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5041
                    ] ifFalse:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5042
                        (next isLetter and:[argArrayOrDictionary isSequenceable not "is a Dictionary"]) ifTrue:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5043
                            "so next is a non-numeric single character."
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5044
                            v := argArrayOrDictionary
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5045
                                    at:next
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5046
                                    ifAbsent:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5047
                                        "try symbol instead of character"
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5048
                                        argArrayOrDictionary
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5049
                                            at:next asSymbol
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5050
                                            ifAbsent:[String with:escapeCharacter with:next].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5051
                                 ].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5052
                        ] ifFalse:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5053
                            v := String with:$% with:next.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5054
                        ].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5055
                    ]
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5056
                ].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5057
                "/ v notNil ifTrue:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5058
                    v isBlock ifTrue:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5059
                        v := v value
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5060
                    ].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5061
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5062
                    v printOn:aStream.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5063
                "/ ].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5064
            ]
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5065
        ].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5066
        start := idx + 2
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5067
    ].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5068
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5069
    "
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5070
     String streamContents:[:s|
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5071
        'hello %1' expandPlaceholders:$% with:#('world') on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5072
        s cr.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5073
        'hello $1; how is $2' expandPlaceholders:$$ with:#('world' 'this') on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5074
        s cr.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5075
        'hello %2; how is %1' expandPlaceholders:$% with:#('world' 'this') on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5076
        s cr.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5077
        '%1 plus %2 gives %3 ' expandPlaceholders:$% with:#(4 5 9) on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5078
        s cr.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5079
        '%%(1)0 gives %(1)0' expandPlaceholders:$% with:#(123) on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5080
        s cr.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5081
        '%%10 gives %10' expandPlaceholders:$% with:#(123) on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5082
        s cr.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5083
        '%%(10) gives %(10) %<cr>%<tab>next line' expandPlaceholders:$% with:#(123) on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5084
        s cr.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5085
        '%test gives %1' expandPlaceholders:$% with:#(123) on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5086
     ]  
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5087
    "
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5088
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5089
    "
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5090
     |dict|
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5091
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5092
     dict := Dictionary new.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5093
     dict at:1 put:'one'.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5094
     dict at:$a put:'AAAAA'.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5095
     dict at:$b put:[ Time now ].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5096
     String streamContents:[:s|
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5097
         'hello $1 $a $b' expandPlaceholders:$$ with:dict on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5098
     ].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5099
    "
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5100
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5101
    "Modified: / 18-11-2010 / 15:43:28 / cg"
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5102
!
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5103
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5104
expandPlaceholdersWith:argArrayOrDictionary
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5105
    "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
  5106
     replaced by corresponding arguments' printStrings from the argArrayOrDictionary.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5107
     I.e. 'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this') results
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5108
     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
  5109
     As an extension, the argument may also be a dictionary, providing
7313
9be9b35f5370 comment
Claus Gittinger <cg@exept.de>
parents: 7312
diff changeset
  5110
     values for symbolic keys.
4842
0086acd80497 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  5111
     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
  5112
     (%1..%9 require a numeric key in the dictionary, however)
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5113
     To get a '%' character, use a '%%'-escape.
7313
9be9b35f5370 comment
Claus Gittinger <cg@exept.de>
parents: 7312
diff changeset
  5114
     To get an integer-indexed placeHolder followed by another digit,
9be9b35f5370 comment
Claus Gittinger <cg@exept.de>
parents: 7312
diff changeset
  5115
     or an index > 9, you must use %(digit).
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5116
     See also bindWith:... for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5117
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5118
    |stream|
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5119
12601
afe93f0d48c5 changed: #expandPlaceholdersWith:
Claus Gittinger <cg@exept.de>
parents: 12519
diff changeset
  5120
    stream := (TextStream ? WriteStream) on:(self species new:self size + 20).
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5121
    self expandPlaceholdersWith:argArrayOrDictionary on:stream.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5122
    ^ stream contents.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5123
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
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5126
     'hello %1' expandPlaceholdersWith:#('world')
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5127
     'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this')
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5128
     'hello %2; how is %1' expandPlaceholdersWith:#('world' 'this')
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5129
     '%1 plus %2 gives %3 ' expandPlaceholdersWith:#(4 5 9)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5130
     '%%(1)0 gives %(1)0' expandPlaceholdersWith:#(123)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5131
     '%%10 gives %10' expandPlaceholdersWith:#(123)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5132
     '%%(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
  5133
     '%test gives %1' expandPlaceholdersWith:#(123)
11028
cb1ee3ddd91a expandPlaceHolders: care fr Text with emphasis
Claus Gittinger <cg@exept.de>
parents: 11018
diff changeset
  5134
     'bla %1 bla' expandPlaceholdersWith:{ 'hello' allBold }
cb1ee3ddd91a expandPlaceHolders: care fr Text with emphasis
Claus Gittinger <cg@exept.de>
parents: 11018
diff changeset
  5135
     'bla %1 bla' expandPlaceholdersWith:{ 'hello' }
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5136
    "
1026
455c9f609f4d care for 16bit strings in expandPlaceHolders
Claus Gittinger <cg@exept.de>
parents: 1025
diff changeset
  5137
4410
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  5138
    "
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  5139
     |dict|
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  5140
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  5141
     dict := Dictionary new.
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  5142
     dict at:1 put:'one'.
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  5143
     dict at:$a put:'AAAAA'.
8794
a5df33935142 nindWith supports blocks in the value dictionary
Claus Gittinger <cg@exept.de>
parents: 8710
diff changeset
  5144
     dict at:$b put:[ Time now ].
12316
3e78905d70a9 comment/format in: #expandPlaceholdersWith:
Claus Gittinger <cg@exept.de>
parents: 12196
diff changeset
  5145
     dict at:'foo' put:[ Date today ].
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  5146
     'hello %1 %a %b %(foo)' expandPlaceholdersWith:dict
4410
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  5147
    "
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  5148
2737
9f29aecea39d care for % at end in expandPlaceHolders.
Claus Gittinger <cg@exept.de>
parents: 2736
diff changeset
  5149
    "Modified: 1.7.1997 / 00:53:24 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5150
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5151
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5152
expandPlaceholdersWith:argArrayOrDictionary on:aStream
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5153
    "write the receiver to aStream, where all %i escapes are
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5154
     replaced by corresponding arguments' printStrings from the argArrayOrDictionary.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5155
     I.e. 'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this') results
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5156
     in the new string 'hello world; how is this'.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5157
     As an extension, the argument may also be a dictionary, providing
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5158
     values for symbolic keys.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5159
     In this case, %a .. %z and %(...) are also allowed.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5160
     (%1..%9 require a numeric key in the dictionary, however)
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5161
     To get a '%' character, use a '%%'-escape.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5162
     To get an integer-indexed placeHolder followed by another digit,
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5163
     or an index > 9, you must use %(digit).
10935
7142eab95639 #expandPlaceHoldersWith:in:
Stefan Vogel <sv@exept.de>
parents: 10929
diff changeset
  5164
     See also bindWith:... for VisualAge compatibility.
10939
d0ca31c1d1e9 #expandPlaceHoldersWith: handle %<cr> %<tab> etc
Stefan Vogel <sv@exept.de>
parents: 10935
diff changeset
  5165
     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
  5166
14765
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5167
    ^ self expandPlaceholders:$% with:argArrayOrDictionary on:aStream
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5168
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5169
    "
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5170
     String streamContents:[:s|
14765
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5171
        'hello %1' expandPlaceholdersWith:#('world') on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5172
        s cr.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5173
        'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this') on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5174
        s cr.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5175
        'hello %2; how is %1' expandPlaceholdersWith:#('world' 'this') on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5176
        s cr.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5177
        '%1 plus %2 gives %3 ' expandPlaceholdersWith:#(4 5 9) on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5178
        s cr.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5179
        '%%(1)0 gives %(1)0' expandPlaceholdersWith:#(123) on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5180
        s cr.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5181
        '%%10 gives %10' expandPlaceholdersWith:#(123) on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5182
        s cr.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5183
        '%%(10) gives %(10) %<cr>%<tab>next line' expandPlaceholdersWith:#(123) on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5184
        s cr.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5185
        '%test gives %1' expandPlaceholdersWith:#(123) on:s.
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5186
     ]
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5187
    "
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5188
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5189
    "
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5190
     |dict|
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5191
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5192
     dict := Dictionary new.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5193
     dict at:1 put:'one'.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5194
     dict at:$a put:'AAAAA'.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5195
     dict at:$b put:[ Time now ].
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5196
     String streamContents:[:s|
14765
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5197
         'hello %1 %a %b' expandPlaceholdersWith:dict on:s.
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5198
     ].
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5199
    "
13008
a27647c36b31 changed: #expandPlaceholdersWith:on:
Claus Gittinger <cg@exept.de>
parents: 12925
diff changeset
  5200
13138
d2eb0eba5907 changed: #expandPlaceholdersWith:on:
Claus Gittinger <cg@exept.de>
parents: 13137
diff changeset
  5201
    "Modified: / 18-11-2010 / 15:43:28 / cg"
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5202
!
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5203
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5204
firstLine
14405
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  5205
    "return the first line of a multiline string"
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  5206
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  5207
    ^ self asCollectionOfSubCollectionsSeparatedBy:(Character cr) do:[:line | ^ line].
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5208
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5209
    "
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5210
     'hello' firstLine
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5211
     '1\2\3' withCRs firstLine
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5212
     '\1\2\3' withCRs firstLine
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5213
    "
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5214
!
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5215
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5216
tokensBasedOn:aCharacter
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5217
    "this is an ST-80 alias for the ST/X method
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5218
	asCollectionOfSubstringsSeparatedBy:"
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5219
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5220
    ^ self asCollectionOfSubstringsSeparatedBy:aCharacter
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5221
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5222
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5223
     'hello:world:isnt:this nice' tokensBasedOn:$:
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5224
     'foo,bar,baz' tokensBasedOn:$,
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5225
     '/etc/passwd' asFilename readStream nextLine tokensBasedOn:$:
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5226
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5227
!
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5228
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5229
withCEscapes
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5230
    "return a new string consisting of receivers characters
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5231
     with all special and unprintable characters replaced by \X-character escapes.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5232
     (similar to the way C-language literal Strings are represented).
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5233
     The resulting string will contain only 7-bit ascii characters.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5234
     Emphasis is not supported.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5235
     The following escapes are generated:
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5236
        \r      return character
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5237
        \n      newline character
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5238
        \t      tab character
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5239
        \\      the \ character itself
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5240
        \xnn    two digit hex number defining the characters ascii value
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5241
        \unnnn  four digit hex number defining the characters ascii value
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5242
        \Unnnnnnnn  eight digit hex number defining the characters ascii value
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5243
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5244
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5245
    |anyEscapeNeeded out seq|
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5246
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5247
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5248
     first, check if any escape is needed and return the receiver unchanged if not
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5249
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5250
    anyEscapeNeeded := self contains:[:ch | (ch codePoint between:32 and:126) not ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5251
    anyEscapeNeeded ifFalse:[ ^ self ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5252
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5253
    self hasChangeOfEmphasis ifTrue:[ self error:'emphasis not supported' ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5254
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5255
    out := WriteStream on:(String new:self size-1).
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5256
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5257
    self do:[:ch |
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5258
        |cp|
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5259
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5260
        (ch codePoint between:32 and:126) ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5261
            out nextPut:ch
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5262
        ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5263
            ch == Character return ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5264
                seq := '\r'
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5265
            ] ifFalse:[ ch == Character nl ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5266
                seq := '\n'
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5267
            ] ifFalse:[ ch == Character tab ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5268
                seq := '\t'
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5269
            ] ifFalse:[ ch == $\ ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5270
                seq := '\\'
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5271
            ] ifFalse:[ 
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5272
                cp := ch codePoint.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5273
                cp <= 16rFF ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5274
                    seq := '\x' , (cp printStringRadix:16 padTo:2)   
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5275
                ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5276
                    cp <= 16rFFFF ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5277
                        seq := '\u' , (cp printStringRadix:16 padTo:4)   
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5278
                    ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5279
                        seq := '\U',(cp printStringRadix:16 padTo:8)
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5280
                    ]
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5281
                ]
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5282
            ]]]].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5283
            out nextPutAll:seq
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5284
        ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5285
    ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5286
    ^ out contents
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5287
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5288
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5289
     'hello\nworld\na\n\tnice\n\t\tstring' withoutCEscapes withCEscapes  
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5290
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5291
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5292
    "Created: / 25-01-2012 / 11:08:16 / cg"
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5293
!
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5294
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5295
withCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5296
    "return a new string consisting of receivers characters
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5297
     with all \-characters replaced by cr-characters."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5298
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5299
    ^ self copyReplaceAll:$\ with:(Character cr)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5300
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5301
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5302
     'hello\world' withCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5303
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5304
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5305
    "Modified: / 18.7.1998 / 22:53:02 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5306
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5307
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5308
withEscapes
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5309
    "has been renamed; the name withEscapes is misleading"
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5310
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5311
    self obsoleteMethodWarning:'use withoutCEscapes'.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5312
    ^ self withoutCEscapes.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5313
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5314
    "Modified: / 25-01-2012 / 10:42:30 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5315
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5316
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5317
withMatchEscapes
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5318
    "return a copy of the receiver with all match characters escaped
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5319
     by $\ characters (to be usable as a match string).
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5320
     Return the receiver, if there are none."
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5321
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  5322
    |in out c escape|
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  5323
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  5324
    escape := self class matchEscapeCharacter.
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5325
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5326
    in := self readStream.
7986
715c72e62d58 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7982
diff changeset
  5327
    out := WriteStream on:(self species new:self size).
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5328
    [in atEnd] whileFalse:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5329
	c := in next.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5330
	(c == escape or:['*[#' includes:c]) ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5331
	    out nextPut:$\.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5332
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5333
	out nextPut:c.
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5334
    ].
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5335
    ^ out contents.
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5336
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5337
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5338
     '*foo' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5339
     '\*foo' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5340
     '*foo' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5341
     '\\*foo' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5342
     'foo*' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5343
     'foo\*' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5344
     'foo\' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5345
     'f*o*o' withMatchEscapes
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5346
    "
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5347
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5348
    "Modified: 2.4.1997 / 18:13:04 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5349
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5350
14992
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  5351
withSeparatorsCompacted
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  5352
    "return a new string with each sequence of whiteSpace replaced by a single space character.
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  5353
     Preserves a leading/trailing space."
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  5354
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  5355
    ^ self species streamContents:[:s |
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  5356
        |skipping|
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  5357
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  5358
        skipping := false.
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  5359
        1 to:self size do:[:idx |
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  5360
            |char|
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  5361
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  5362
            char := self at:idx.
14993
bbabce626acf class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14992
diff changeset
  5363
            char isSeparator ifFalse:[
bbabce626acf class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14992
diff changeset
  5364
                s nextPut:char.
bbabce626acf class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14992
diff changeset
  5365
                skipping := false.
bbabce626acf class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14992
diff changeset
  5366
            ] ifTrue:[
bbabce626acf class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14992
diff changeset
  5367
                skipping ifFalse:[
14992
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  5368
                    s nextPut:(Character space).
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  5369
                    skipping := true
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  5370
                ].
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  5371
            ]
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  5372
        ]
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  5373
    ]
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  5374
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  5375
    "
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  5376
     'hello wwww'         withSeparatorsCompacted  
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  5377
     'hello    wwww'      withSeparatorsCompacted  
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  5378
     '  hello wwww'       withSeparatorsCompacted  
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  5379
     '  hello wwww   '    withSeparatorsCompacted  
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  5380
     '  hello    wwww   ' withSeparatorsCompacted  
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  5381
     'hel   lo www   w'   withSeparatorsCompacted  
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  5382
    "
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  5383
!
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  5384
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5385
withTabs
735
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  5386
    "return a string consisting of the receivers characters
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  5387
     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
  5388
     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
  5389
     otherwise a new string is returned.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5390
     Limitation: only the very first spaces are replaced
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5391
		 (i.e. if the receiver contains newLine characters,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5392
		  no tabs are inserted after those lineBreaks)"
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5393
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5394
    |idx   "{ SmallInteger }"
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5395
     nTabs "{ SmallInteger }"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5396
     newString|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5397
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5398
    idx := self findFirst:[:c | (c ~~ Character space)].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5399
    nTabs := (idx-1) // 8.
5815
4acdd87a77d4 // can return negative numbers.
Stefan Vogel <sv@exept.de>
parents: 5795
diff changeset
  5400
    nTabs <= 0 ifTrue:[^ self].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5401
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5402
    "any tabs"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5403
    newString := self class new:(self size - (nTabs * 7)).
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5404
    newString atAll:(1 to:nTabs) put:(Character tab).
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5405
    newString replaceFrom:(nTabs + 1) with:self startingAt:(nTabs * 8 + 1).
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5406
    ^ newString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5407
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5408
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5409
     '12345678901234567890' withTabs
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5410
     '       8901234567890' withTabs
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5411
     '        901234567890' withTabs
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5412
     '               67890' withTabs
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5413
     '                7890' withTabs
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5414
     '                 890' withTabs
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5415
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5416
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5417
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5418
withTabsExpanded
735
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  5419
    "return a string consisting of the receivers characters,
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5420
     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
  5421
     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
  5422
     otherwise a new string is returned.
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  5423
     This does handle multiline strings."
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5424
5741
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5425
    ^ self withTabsExpanded:8
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5426
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5427
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5428
     ('1' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5429
     ('12345' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5430
     ('123456' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5431
     ('1234567' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5432
     ('12345678' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5433
     ('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
  5434
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5435
     (String with:Character tab
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5436
	     with:Character tab
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5437
	     with:$1) withTabsExpanded
5741
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5438
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5439
     (String with:Character tab
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5440
	     with:$1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5441
	     with:Character tab
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5442
	     with:$2) withTabsExpanded
5741
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5443
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5444
     (String with:Character tab
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5445
	     with:$1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5446
	     with:Character cr
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5447
	     with:Character tab
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5448
	     with:$2) withTabsExpanded
5741
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5449
    "
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5450
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5451
    "Modified: 12.5.1996 / 13:05:10 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5452
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5453
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5454
withTabsExpanded:numSpaces
5741
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5455
    "return a string consisting of the receivers characters,
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5456
     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
  5457
     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
  5458
     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
  5459
     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
  5460
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5461
    |col    "{ SmallInteger }"
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5462
     str ch
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5463
     dstIdx "{ SmallInteger }"
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5464
     newSz  "{ SmallInteger }"
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5465
     sz "{ SmallInteger }"
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5466
     hasEmphasis e|
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5467
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5468
    (self includes:(Character tab)) ifFalse:[^ self].
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5469
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5470
    sz := self size.
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5471
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5472
    "/ count the new size first, instead of
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5473
    "/ multiple resizing (better for large strings)
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5474
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5475
    col := 1. newSz := 0.
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5476
    1 to:sz do:[:srcIdx |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5477
	ch := self at:srcIdx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5478
	ch == Character tab ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5479
	    col := col + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5480
	    newSz := newSz + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5481
	    ch == Character cr ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5482
		col := 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5483
	    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5484
	] ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5485
	    (col \\ numSpaces) to:numSpaces do:[:ii |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5486
		newSz := newSz + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5487
		col := col + 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5488
	    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5489
	]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5490
    ].
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5491
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5492
    str := self species new:newSz.
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5493
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5494
    hasEmphasis := self hasChangeOfEmphasis.
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5495
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5496
    col := 1. dstIdx := 1.
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5497
    1 to:sz do:[:srcIdx |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5498
	ch := self at:srcIdx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5499
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5500
	ch == Character tab ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5501
	    col := col + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5502
	    ch == Character cr ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5503
		col := 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5504
	    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5505
	    hasEmphasis ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5506
		e := self emphasisAt:srcIdx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5507
		str emphasisAt:dstIdx put:e
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5508
	    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5509
	    str at:dstIdx put:ch.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5510
	    dstIdx := dstIdx + 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5511
	] ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5512
	    (col \\ numSpaces) to:numSpaces do:[:ii |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5513
		str at:dstIdx put:Character space.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5514
		dstIdx := dstIdx + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5515
		col := col + 1
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
	]
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5518
    ].
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5519
    ^ str
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5520
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5521
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5522
     ('1' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5523
     ('1' , Character tab asString , 'x') withTabsExpanded:4
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5524
     ('12345' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5525
     ('123456' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5526
     ('1234567' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5527
     ('12345678' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5528
     ('123456789' , Character tab asString , 'x') withTabsExpanded
735
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  5529
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5530
     (String with:Character tab
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5531
	     with:Character tab
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5532
	     with:$1) withTabsExpanded
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5533
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5534
     (String with:Character tab
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5535
	     with:$1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5536
	     with:Character tab
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5537
	     with:$2) withTabsExpanded
735
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  5538
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  5539
     (String with:Character tab
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5540
	     with:$1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5541
	     with:Character cr
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5542
	     with:Character tab
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5543
	     with:$2) withTabsExpanded
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5544
    "
735
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  5545
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5546
    "Modified: 12.5.1996 / 13:05:10 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5547
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5548
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5549
withoutAllSpaces
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5550
    ^ self asCollectionOfWords asStringWith:''.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5551
"/    |col string|
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5552
"/
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5553
"/    col := self asCollectionOfWords.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5554
"/    string := String new.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5555
"/    col do:[:el |
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5556
"/       string := string,el
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5557
"/    ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5558
"/    ^string
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5559
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5560
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5561
     'hello wwww'  withoutAllSpaces
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5562
     'hel   lo www   w'  withoutAllSpaces
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5563
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5564
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5565
    "Modified: / 18.7.1998 / 22:53:08 / cg"
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5566
!
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5567
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5568
withoutCEscapes
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5569
    "return a new string consisting of receivers characters
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5570
     with all \X-character escapes replaced by corresponding-characters.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5571
     (similar to the way C-language Strings are converted).
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5572
     The following escapes are supported:
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5573
        \r      return character
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5574
        \n      newline character
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5575
        \b      backspace character
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5576
        \f      formfeed character
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5577
        \t      tab character
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5578
        \e      escape character
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5579
        \\      the \ character itself
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5580
        \nnn    three digit octal number defining the characters ascii value
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5581
        \xnn    two digit hex number defining the characters ascii value
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5582
        \unnnn  four digit hex number defining the characters unicode value
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5583
        \Unnnnnnnn  eight digit hex number defining the characters unicode value
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5584
        \other  other
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5585
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5586
     Notice, that \' is NOT a valid escape, since the general syntax of
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5587
     string constants is not affected by this method.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5588
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5589
     Although easily implementable, this is NOT done automatically
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5590
     by the compiler (due to a lack of a language standard for this).
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5591
     However, the compiler may detect sends ot #withEscapes to string literals
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5592
     and place a modified string constant into the binary/byte-code.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5593
     Therefore, no runtime penalty will be payed for using these escapes.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5594
     (not in pre 2.11 versions)
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5595
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5596
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5597
    |val     "{ SmallInteger }"
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5598
     in out nextChar nDigits|
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5599
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5600
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5601
     first, see if there is any escape; if not, return the receiver unchanged
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5602
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5603
    (self includes:$\) ifFalse:[^ self ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5604
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5605
    self hasChangeOfEmphasis ifTrue:[ self error:'emphasis not supported' ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5606
    out := CharacterWriteStream on:(String new:self size - 1).
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5607
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5608
    in := ReadStream on:self.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5609
    [in atEnd] whileFalse:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5610
        nextChar := in next.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5611
        nextChar == $\ ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5612
            in atEnd ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5613
            ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5614
                nextChar := in next.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5615
                nextChar == $r ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5616
                    nextChar := Character return
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5617
                ] ifFalse:[ nextChar == $n ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5618
                    nextChar := Character nl
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5619
                ] ifFalse:[ nextChar == $b ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5620
                    nextChar := Character backspace
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5621
                ] ifFalse:[ nextChar == $f ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5622
                    nextChar := Character newPage
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5623
                ] ifFalse:[ nextChar == $t ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5624
                    nextChar := Character tab
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5625
                ] ifFalse:[ nextChar == $e ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5626
                    nextChar := Character esc
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5627
                ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5628
                    nextChar == $0 ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5629
                        val := 0.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5630
                        nextChar := in peek.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5631
                        nDigits := 1.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5632
                        [nextChar notNil and:[nextChar isDigit and:[nDigits <= 3]]] whileTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5633
                            val := (val * 8) + nextChar digitValue.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5634
                            nextChar := in nextPeek.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5635
                            nDigits := nDigits + 1.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5636
                        ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5637
                        nextChar := Character value:val.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5638
                    ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5639
                        val := 0.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5640
                        nextChar == $x ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5641
                            2 timesRepeat:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5642
                                nextChar := in next.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5643
                                val := (val * 16) + nextChar digitValue.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5644
                            ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5645
                            nextChar := Character value:val.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5646
                        ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5647
                            nextChar == $u ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5648
                                4 timesRepeat:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5649
                                    nextChar := in next.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5650
                                    val := (val * 16) + nextChar digitValue.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5651
                                ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5652
                                nextChar := Character value:val.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5653
                            ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5654
                                nextChar == $U ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5655
                                    8 timesRepeat:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5656
                                        nextChar := in next.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5657
                                        val := (val * 16) + nextChar digitValue.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5658
                                    ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5659
                                    nextChar := Character value:val.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5660
                                ]
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5661
                            ]
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5662
                        ]
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5663
                    ]
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5664
                ]]]]]].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5665
            ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5666
        ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5667
        out nextPut:nextChar.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5668
    ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5669
    ^ out contents
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5670
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5671
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5672
     'hello world' withoutCEscapes         
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5673
     'hello\world' withoutCEscapes         
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5674
     'hello\world\' withoutCEscapes        
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5675
     'hello world\' withoutCEscapes        
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5676
     'hello\tworld' withoutCEscapes        
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5677
     'hello\nworld\na\n\tnice\n\t\tstring' withoutCEscapes
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5678
     'hello\tworld\n' withoutCEscapes   
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5679
     'hello\010world' withoutCEscapes   
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5680
     'hello\r\nworld' withoutCEscapes   
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5681
     'hello\r\n\x08world' withoutCEscapes 
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5682
     '0\x080' withoutCEscapes       
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5683
     '0\u12340' withoutCEscapes       
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5684
     '0\U123456780' withoutCEscapes       
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5685
     '0\0a' withoutCEscapes     
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5686
     '0\00a' withoutCEscapes       
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5687
     '0\000a' withoutCEscapes       
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5688
     '0\0000a' withoutCEscapes       
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5689
     '0\00000a' withoutCEscapes       
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5690
     '0\03770' withoutCEscapes       
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5691
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5692
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5693
    "Created: / 25-01-2012 / 10:41:44 / cg"
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5694
!
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5695
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5696
withoutCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5697
    "return a new collection consisting of receivers elements
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5698
     with all cr-characters replaced by \-characters.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5699
     This is the reverse operation of withCRs."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5700
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5701
    ^ self copyReplaceAll:(Character cr) with:$\
12319
18b80c2ce1e3 oops #withoutSeparators #withoutSpaces were noops
Claus Gittinger <cg@exept.de>
parents: 12317
diff changeset
  5702
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5703
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5704
     'hello
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5705
world' withoutCRs
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
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5708
    "Modified: / 18.7.1998 / 22:53:08 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5709
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5710
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5711
withoutLeadingSeparators
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5712
    "return a copy of myself without leading separators.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5713
     Notice: this does remove tabs, newline or any other whitespace.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5714
     Returns an empty string, if the receiver consist only of whitespace."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5715
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5716
    |index|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5717
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5718
    index := self indexOfNonSeparatorStartingAt:1.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5719
    index ~~ 0 ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5720
	index == 1 ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5721
	    ^ self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5722
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5723
	^ self copyFrom:index
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5724
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5725
    ^ ''
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5726
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5727
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5728
     '    foo    ' withoutLeadingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5729
     'foo    '     withoutLeadingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5730
     '    foo'     withoutLeadingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5731
     '       '     withoutLeadingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5732
     'foo'         withoutLeadingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5733
     ('  ' , Character tab asString , ' foo   ') withoutLeadingSeparators inspect
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5734
    "
9192
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
withoutMatchEscapes
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5738
    "return a copy of the receiver with all $\ removed or
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5739
     the receiver, if there are none."
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5740
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  5741
    |in out c escape|
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  5742
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  5743
    escape := self class matchEscapeCharacter.
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5744
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5745
    in := self readStream.
8222
f2c454a9a038 replaced '' writeStream by String writeStream
Claus Gittinger <cg@exept.de>
parents: 8124
diff changeset
  5746
    out := self species writeStream.
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5747
    [in atEnd] whileFalse:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5748
	c := in next.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5749
	c == escape ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5750
	    in atEnd ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5751
		c := in next.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5752
	    ]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5753
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5754
	out nextPut:c.
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5755
    ].
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5756
    ^ out contents.
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5757
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5758
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5759
     '*foo' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5760
     '\*foo' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5761
     '*foo' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5762
     '\\*foo' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5763
     'foo*' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5764
     'foo\*' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5765
     'foo\' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5766
     'f\*o\*o' withoutMatchEscapes
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5767
    "
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5768
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5769
    "Modified: 30.6.1997 / 13:40:23 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5770
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5771
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5772
withoutPrefix:aString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5773
    "if the receiver startsWith aPrefix, return a copy without it.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5774
     Otherwise return the receiver"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5775
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5776
    (self startsWith:aString) ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5777
	^ self copyFrom:aString size + 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5778
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5779
    ^ self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5780
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5781
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5782
     'helloworld' withoutPrefix:'hello'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5783
     'helloworld' withoutPrefix:'foo'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5784
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5785
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5786
10671
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5787
withoutQuotes
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5788
    "remove quotes ("" and ') from the front and the end of myself"
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5789
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5790
    |result quote|
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5791
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5792
    result := self.
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5793
    ((result startsWith:$") or:[(result startsWith:$')]) ifTrue:[
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5794
	quote := result at:1.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5795
	result := result copyFrom:2.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5796
	(result endsWith:quote) ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5797
	    result := result copyWithoutLast:1
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5798
	].
10671
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5799
    ].
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5800
    ^ result
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5801
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5802
"/    '"hello"' withoutQuotes
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5803
"/    '''hello''' withoutQuotes
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5804
"/    'hello' withoutQuotes
10671
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5805
!
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5806
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5807
withoutSeparators
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5808
    "return a copy of myself without leading and trailing whitespace.
4156
3079a5a94617 comments
Claus Gittinger <cg@exept.de>
parents: 4117
diff changeset
  5809
     (but whiteSpace in-between is preserved)
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5810
     Whitespace is space, tab, newline, formfeed.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5811
     Use withoutSpaces, if you want to remove spaces only."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5812
12319
18b80c2ce1e3 oops #withoutSeparators #withoutSpaces were noops
Claus Gittinger <cg@exept.de>
parents: 12317
diff changeset
  5813
    ^ self trimForWhich:[:ch | ch isSeparator]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5814
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5815
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5816
     '    foo    ' withoutSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5817
     '    foo' withoutSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5818
     'foo    ' withoutSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5819
     '       ' withoutSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5820
     ('  foo' , Character tab asString , '    ') withoutSeparators inspect
12319
18b80c2ce1e3 oops #withoutSeparators #withoutSpaces were noops
Claus Gittinger <cg@exept.de>
parents: 12317
diff changeset
  5821
     '    foo    ' asUnicode16String withoutSeparators
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5822
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5823
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5824
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5825
withoutSpaces
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5826
    "return a copy of myself without leading and trailing spaces.
4156
3079a5a94617 comments
Claus Gittinger <cg@exept.de>
parents: 4117
diff changeset
  5827
     (but spaces in-between are preserved)
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5828
     Notice: this does NOT remove tabs, newline or any other whitespace.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5829
     Use withoutSeparators for this."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5830
12319
18b80c2ce1e3 oops #withoutSeparators #withoutSpaces were noops
Claus Gittinger <cg@exept.de>
parents: 12317
diff changeset
  5831
    ^ self trimForWhich:[:ch | ch == Character space]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5832
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5833
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5834
     '    foo    ' withoutSpaces
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5835
     'foo    '     withoutSpaces
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5836
     '    foo'     withoutSpaces
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5837
     '       '     withoutSpaces
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5838
     'a     b'     withoutSpaces
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5839
     ('  foo' , Character tab asString , '    ') withoutSpaces inspect
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5840
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5841
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5842
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5843
withoutTrailingSeparators
915
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  5844
    "return a copy of myself without trailing separators.
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  5845
     Notice: this does remove tabs, newline or any other whitespace.
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  5846
     Returns an empty string, if the receiver consist only of whitespace."
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  5847
12188
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  5848
    ^ self withoutTrailingForWhich:[:ch | ch isSeparator]
915
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  5849
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  5850
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5851
     '    foo    ' withoutTrailingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5852
     'foo    '     withoutTrailingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5853
     '    foo'     withoutTrailingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5854
     '       '     withoutTrailingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5855
     'foo'         withoutTrailingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5856
     ('  ' , Character tab asString , ' foo   ') withoutTrailingSeparators inspect
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5857
     ('   foo' , Character tab asString) withoutTrailingSeparators inspect
915
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  5858
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5859
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5860
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5861
!CharacterArray methodsFor:'substring searching'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5862
15055
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  5863
findRangeOfString:subString
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  5864
    "find a substring. if found, return the start- and endIndex;
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  5865
     if not found, return an empty interval."
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  5866
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  5867
    ^ self rangeOfSubCollection:subString startingAt:1 ifAbsent:[0 to:-1] caseSensitive:true
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  5868
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  5869
    "
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  5870
     'hello world' findRangeOfString:'llo'
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  5871
     'hello world' findRangeOfString:'ole'
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  5872
    "
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  5873
!
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  5874
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5875
findString:subString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5876
    "find a substring. if found, return the index;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5877
     if not found, return 0."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5878
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5879
    ^ self indexOfSubCollection:subString startingAt:1 ifAbsent:0 caseSensitive:true
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5880
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5881
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5882
     'hello world' findString:'llo'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5883
     'hello world' findString:'ole'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5884
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5885
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5886
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5887
findString:subString ifAbsent:exceptionBlock
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5888
    "find a substring. If found, return the index;
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5889
     if not found, return the result of evaluating exceptionBlock."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5890
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5891
    ^ self indexOfSubCollection:subString startingAt:1 ifAbsent:exceptionBlock caseSensitive:true
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5892
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5893
11018
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5894
findString:subString ignoreCase:ignoreCase
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5895
    "find a substring. if found, return the index;
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5896
     if not found, return 0."
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5897
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5898
    ^ self indexOfSubCollection:subString startingAt:1 ifAbsent:0 caseSensitive:ignoreCase not
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5899
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5900
    "
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5901
     'hello world' findString:'LLo' ignoreCase:false
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5902
     'hello world' findString:'LLo' ignoreCase:true
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5903
    "
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5904
!
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5905
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5906
findString:subString startingAt:index
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5907
    "find a substring, starting at index. if found, return the index;
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5908
     if not found, return 0."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5909
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5910
    ^ self indexOfSubCollection:subString startingAt:index ifAbsent:0 caseSensitive:true
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5911
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5912
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5913
     'hello yello' findString:'llo' startingAt:1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5914
     'hello yello' findString:'llo' startingAt:5
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5915
     'hello yello' findString:'llo' startingAt:15
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5916
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5917
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5918
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5919
findString:subString startingAt:index ifAbsent:exceptionBlock
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5920
    "find a substring, starting at index. if found, return the index;
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5921
     if not found, return the result of evaluating exceptionBlock."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5922
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5923
    ^ self indexOfSubCollection:subString startingAt:index ifAbsent:exceptionBlock caseSensitive:true
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5924
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5925
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5926
findString:subString startingAt:index ifAbsent:exceptionBlock caseSensitive:caseSensitive
10929
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  5927
    "find a substring, starting at index. if found, return the index;
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  5928
     if not found, return the result of evaluating exceptionBlock."
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  5929
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  5930
    ^ self indexOfSubCollection:subString startingAt:index ifAbsent:exceptionBlock caseSensitive:caseSensitive
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  5931
!
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  5932
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5933
includesString:aString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5934
    "return true, if a substring is contained in the receiver"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5935
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5936
    ^ (self indexOfSubCollection:aString startingAt:1 ifAbsent:0 caseSensitive:true) ~~ 0
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5937
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5938
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5939
     'hello world' includesString:'hel'
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5940
     'hello world' includesString:'rld'
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5941
     'hello world' includesString:'llo'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5942
     'hello world' includesString:'LLO'
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5943
     'hello world' includesString:''
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5944
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5945
!
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  5946
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  5947
includesString:aString caseSensitive:caseSensitive
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5948
    "return true, if a substring is contained in the receiver"
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5949
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5950
    ^ (self indexOfSubCollection:aString startingAt:1 ifAbsent:0 caseSensitive:caseSensitive) ~~ 0
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5951
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5952
    "
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5953
     'hello world' includesString:'hel' caseSensitive:true
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5954
     'hello world' includesString:'HEL' caseSensitive:true
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5955
     'hello world' includesString:'HEL' caseSensitive:false
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5956
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5957
     'hello world' includesString:'wor' caseSensitive:true
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5958
     'hello world' includesString:'WOR' caseSensitive:true
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5959
     'hello world' includesString:'WOR' caseSensitive:false
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5960
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5961
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5962
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5963
indexOfSubCollection:subString startingAt:index ifAbsent:exceptionBlock
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5964
    "find a substring, starting at index. if found, return the index;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5965
     if not found, return the result of evaluating exceptionBlock.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5966
     This is a q&d hack - not very efficient"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5967
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5968
    ^ self indexOfSubCollection:subString startingAt:index ifAbsent:exceptionBlock caseSensitive:true.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5969
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5970
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5971
indexOfSubCollection:subString startingAt:index ifAbsent:exceptionBlock caseSensitive:caseSensitive
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5972
    "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
  5973
     if not found, return the result of evaluating exceptionBlock.
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5974
     This is a q&d hack - not very efficient"
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5975
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5976
    |firstChar found
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5977
     startIndex "{ Class: SmallInteger }"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5978
     subSize    "{ Class: SmallInteger }"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5979
     mySize     "{ Class: SmallInteger }"
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5980
     runIdx     "{ Class: SmallInteger }"
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5981
     tester|
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5982
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5983
    subSize := subString size.
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5984
    subSize == 0 ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5985
	subString isString ifFalse:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5986
	   self error:'non string argument' mayProceed:true.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5987
	].
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5988
	"empty string does not match"
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5989
	^ 0.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5990
	"empty string matches"
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5991
	^ index
6122
a98958f1c85f handle non-string arg to indexOfSubString:
Claus Gittinger <cg@exept.de>
parents: 6119
diff changeset
  5992
    ].
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5993
    tester := caseSensitive
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5994
		ifTrue:[  [:c1 :c2 | c1 = c2 ]  ]
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5995
		ifFalse:[ [:c1 :c2 | c1 sameAs: c2 ] ].
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5996
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5997
    mySize := self size.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5998
    firstChar := subString at:1.
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5999
    caseSensitive ifTrue:[
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6000
	startIndex := self indexOf:firstChar startingAt:index.
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6001
    ] ifFalse:[
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6002
	startIndex := self findFirst:[:c | c sameAs:firstChar] startingAt:index.
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6003
    ].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6004
    [startIndex == 0] whileFalse:[
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6005
	runIdx := startIndex.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6006
	found := true.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6007
	1 to:subSize do:[:i |
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6008
	    runIdx > mySize ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6009
		found := false
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6010
	    ] ifFalse:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6011
		(tester value:(subString at:i) value:(self at:runIdx)) ifFalse:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6012
		    found := false
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6013
		]
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6014
	    ].
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6015
	    runIdx := runIdx + 1
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6016
	].
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6017
	found ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6018
	    ^ startIndex
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6019
	].
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6020
	caseSensitive ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6021
	    startIndex := self indexOf:firstChar startingAt:(startIndex + 1)
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6022
	] ifFalse:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6023
	    startIndex := self findFirst:[:c | c sameAs:firstChar] startingAt:(startIndex + 1).
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6024
	].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6025
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6026
    ^ exceptionBlock value
1005
4507487e0be6 more on encoding/decoding (still unfinished)
Claus Gittinger <cg@exept.de>
parents: 997
diff changeset
  6027
4507487e0be6 more on encoding/decoding (still unfinished)
Claus Gittinger <cg@exept.de>
parents: 997
diff changeset
  6028
    "Modified: 23.2.1996 / 15:35:15 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6029
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6030
15055
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6031
rangeOfSubCollection:subString startingAt:start ifAbsent:exceptionValue caseSensitive:caseSensitive
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6032
    "find a substring. if found, return the start- and endIndex;
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6033
     if not found, return the value of exceptionValue."
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6034
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6035
    |i|
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6036
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6037
    i := self indexOfSubCollection:subString startingAt:start ifAbsent:0 caseSensitive:caseSensitive.
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6038
    i == 0 ifTrue:[
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6039
        ^ exceptionValue value
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6040
    ].
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6041
    ^ i to:(i + subString size - 1)
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6042
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6043
    "
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6044
     'hello world' findRangeOfString:'llo'
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6045
     'hello world' findRangeOfString:'ole'
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6046
    "
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6047
!
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6048
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6049
restAfter:keyword withoutSeparators:strip
651
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  6050
    "compare the left of the receiver with keyword,
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6051
     if it matches return the right.
651
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  6052
     Finally, if strip is true, remove whiteSpace.
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  6053
     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
  6054
	something: rest
759
908363ce8a32 interest is written with one 'r' (shame on me)
Claus Gittinger <cg@exept.de>
parents: 735
diff changeset
  6055
     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
  6056
     begins with something.
651
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  6057
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  6058
     You may wonder why such a specialized method exists here
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  6059
     - this is so common when processing mailboxes,
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  6060
     rcs files, nntp/pop3 responses, that is was considered worth
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  6061
     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
  6062
     times in variuos places."
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  6063
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  6064
    |rest|
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  6065
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  6066
    (self startsWith:keyword) ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6067
	rest := self copyFrom:(keyword size + 1).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6068
	strip ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6069
	    rest := rest withoutSeparators
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6070
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6071
	^ rest
651
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  6072
    ].
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  6073
    ^ nil
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  6074
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  6075
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6076
     'foo: hello world' restAfter:'foo:' withoutSeparators:true
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6077
     'funny: something' restAfter:'foo:' withoutSeparators:true
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6078
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6079
     'foo:     hello world    ' restAfter:'foo:' withoutSeparators:true
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6080
     'foo:     hello world    ' restAfter:'foo:' withoutSeparators:false
651
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  6081
    "
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  6082
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  6083
    "Created: 25.11.1995 / 11:04:18 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6084
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6085
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6086
!CharacterArray methodsFor:'testing'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6087
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6088
isAlphaNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6089
    "return true, if the receiver is some alphanumeric word;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6090
     i.e. consists of a letter followed by letters or digits."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6091
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6092
    self size == 0 ifTrue:[
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6093
	"mhmh what is this ?"
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6094
	^ false
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6095
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6096
    (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
  6097
    ^ self conform:[:char | char isLetterOrDigit].
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  6098
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  6099
    "
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6100
     'helloWorld' isAlphaNumeric
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6101
     'foo1234' isAlphaNumeric
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6102
     'f1234' isAlphaNumeric
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6103
     '1234' isAlphaNumeric
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6104
     '+' isAlphaNumeric
10093
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  6105
    "
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  6106
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  6107
    "Modified: / 13-10-2006 / 12:53:49 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6108
!
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  6109
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  6110
isBinarySelector
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  6111
    "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
  6112
     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
  6113
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  6114
    |binopChars|
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  6115
13332
329707312282 changed: #isBinarySelector
Stefan Vogel <sv@exept.de>
parents: 13327
diff changeset
  6116
    (self size > Scanner maxBinarySelectorSize) ifTrue:[^ false].
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  6117
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  6118
    binopChars := Scanner binarySelectorCharacters.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  6119
    ^ (self conform:[:char | (binopChars includes:char)])
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  6120
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  6121
    "
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  6122
     'foo:bar:' isBinarySelector
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  6123
     #foo:bar: isBinarySelector
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  6124
     'hello' isBinarySelector
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  6125
     '+' isBinarySelector
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  6126
     '|' isBinarySelector
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6127
     '?' isBinarySelector
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6128
     ':' isBinarySelector
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6129
     'a:' isBinarySelector
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6130
     '->' isBinarySelector
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6131
     '<->' isBinarySelector
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6132
     '::' isBinarySelector
7482
e73c296fa7dc + isBinarySelector
Claus Gittinger <cg@exept.de>
parents: 7423
diff changeset
  6133
    "
e73c296fa7dc + isBinarySelector
Claus Gittinger <cg@exept.de>
parents: 7423
diff changeset
  6134
e73c296fa7dc + isBinarySelector
Claus Gittinger <cg@exept.de>
parents: 7423
diff changeset
  6135
    "Modified: 4.1.1997 / 14:16:14 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6136
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6137
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6138
isBlank
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6139
    "return true, if the receiver contains spaces only"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6140
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6141
    ^ (self contains:[:char | char ~~ Character space]) not
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6142
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6143
    "
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6144
     '' isBlank
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6145
     '   a    ' isBlank
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6146
     '        ' isBlank
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6147
     '        ' asUnicode16String isBlank
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6148
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6149
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6150
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  6151
isKeywordSelector
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  6152
    "return true, iff there are only alphanumeric or underline characters separated by colons.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  6153
     Must end with a colon."
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  6154
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  6155
    |state|
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  6156
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6157
    state := #initial.
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  6158
    self do:[:char |
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6159
	(state == #initial or:[ state == #gotColon]) ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6160
	    (char isLetter or:[ char == $_ ]) ifFalse:[^ false].
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6161
	    state := #gotCharacter.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6162
	] ifFalse:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6163
	    char == $: ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6164
		state := #gotColon.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6165
	    ] ifFalse:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6166
		(char isLetterOrDigit or:[char == $_]) ifFalse:[^ false].
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6167
	    ].
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6168
	].
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  6169
    ].
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  6170
    ^ state == #gotColon.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  6171
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  6172
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6173
     self assert:(':' isKeywordSelector not).
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  6174
     self assert:(':a' isKeywordSelector not).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  6175
     self assert:('1:' isKeywordSelector not).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  6176
     self assert:('a:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  6177
     self assert:('_:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  6178
     self assert:('_a:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  6179
     self assert:('_1:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  6180
     self assert:('_1::' isKeywordSelector not).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  6181
     self assert:('_:_:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  6182
     self assert:('a:b:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  6183
     self assert:('aa:bb:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  6184
     self assert:('aa:bb:a' isKeywordSelector not).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  6185
     self assert:('1:2:' isKeywordSelector not).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  6186
    "
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  6187
!
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  6188
10431
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  6189
isNameSpaceSelector
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  6190
    "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
  6191
     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
  6192
     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
  6193
     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
  6194
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  6195
    |i|
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  6196
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  6197
    (self first == $:) ifFalse:[^ false].
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  6198
    i := self indexOf:$: startingAt:2.
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  6199
    i == 0 ifTrue:[^ false].
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  6200
    self size <= (i+1) ifTrue:[^ false].
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  6201
    (self at:i+1) == $: ifFalse:[^ false].
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  6202
    (self at:i+2) == $: ifTrue:[^ false].
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  6203
    "/ 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
  6204
    ^ true
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  6205
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  6206
    "test:
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6207
     self assert:('+' isNameSpaceSelector) not.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6208
     self assert:(':+' isNameSpaceSelector) not.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6209
     self assert:(':Foo:+' isNameSpaceSelector) not.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6210
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6211
     self assert:(':Foo::+' isNameSpaceSelector).
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6212
     self assert:(':Foo::bar:baz:' isNameSpaceSelector).
10431
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  6213
    "
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  6214
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  6215
    "Created: / 05-03-2007 / 11:35:31 / cg"
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  6216
!
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  6217
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6218
isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6219
    "return true, if the receiver is some numeric word;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6220
     i.e. consists only of digits."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6221
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6222
    self size == 0 ifTrue:[
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6223
	^ false
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6224
    ].
10093
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  6225
    ^ self conform:[:char | char isDigit]
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6226
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6227
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6228
     'helloWorld' isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6229
     'foo1234' isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6230
     'f1234' isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6231
     '1234' isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6232
     '+' isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6233
    "
10093
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  6234
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  6235
    "Modified: / 13-10-2006 / 12:54:12 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6236
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6237
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6238
isString
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6239
    "return true, if the receiver is some kind of string;
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6240
     true is returned here - redefinition of Object>>isString."
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6241
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6242
    ^ true
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6243
!
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6244
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6245
isUnarySelector
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6246
    "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
  6247
9471
7b1df2a2a2d7 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9425
diff changeset
  6248
    ^ (self first isLetter or:[ self first == $_ ])
9845
361f4b5d7b19 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9522
diff changeset
  6249
      and:[ self conform: [ :chr | chr isLetterOrDigit or:[chr == $_] ]]
361f4b5d7b19 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9522
diff changeset
  6250
361f4b5d7b19 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9522
diff changeset
  6251
    "Modified: / 13-09-2006 / 11:35:15 / cg"
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6252
!
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6253
14122
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  6254
isUnicode16String
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  6255
    ^ false
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  6256
!
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  6257
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  6258
isUnicode32String
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  6259
    ^ false
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  6260
!
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  6261
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  6262
isUnicodeString
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  6263
    ^ false
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  6264
!
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  6265
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6266
isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6267
    "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
  6268
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6269
    |scanner tok|
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6270
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6271
    scanner := Compiler new.
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6272
    scanner source:(self readStream).
11630
6db5956f188f isValidSmalltalkIdentifier: return true/false (catch parseError)
Claus Gittinger <cg@exept.de>
parents: 11565
diff changeset
  6273
    Parser parseErrorSignal handle:[:ex |
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6274
	tok := nil.
11630
6db5956f188f isValidSmalltalkIdentifier: return true/false (catch parseError)
Claus Gittinger <cg@exept.de>
parents: 11565
diff changeset
  6275
    ] do:[
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6276
	tok := scanner nextToken.
11630
6db5956f188f isValidSmalltalkIdentifier: return true/false (catch parseError)
Claus Gittinger <cg@exept.de>
parents: 11565
diff changeset
  6277
    ].
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6278
    tok ~~ #Identifier ifTrue:[
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6279
	^ false
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6280
    ].
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6281
    scanner tokenPosition == 1 ifFalse:[^ false].
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6282
    ^ scanner sourceStream atEnd.
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6283
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6284
    "
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6285
     'foo' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6286
     '1foo' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6287
     '_foo' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6288
     '_foo_bar_' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6289
     'foo ' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6290
     ' foo' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6291
    "
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6292
!
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6293
14555
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  6294
isWideString
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  6295
    ^ self bitsPerCharacter > 8
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  6296
!
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  6297
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6298
numArgs
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6299
    "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
  6300
9038
d75b89570ec0 numArgs fixed (binOps can now be longer)
Claus Gittinger <cg@exept.de>
parents: 9019
diff changeset
  6301
    |binopChars|
d75b89570ec0 numArgs fixed (binOps can now be longer)
Claus Gittinger <cg@exept.de>
parents: 9019
diff changeset
  6302
d75b89570ec0 numArgs fixed (binOps can now be longer)
Claus Gittinger <cg@exept.de>
parents: 9019
diff changeset
  6303
    (self size <= Scanner maxBinarySelectorSize) ifTrue:[
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6304
	binopChars := Scanner binarySelectorCharacters.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6305
	(self conform:[:eachChar | (binopChars includes:eachChar)]) ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6306
	    ^ 1
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6307
	].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6308
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6309
    ^ self occurrencesOf:$:
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6310
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6311
    "
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6312
     'foo:bar:' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6313
     #foo:bar: numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6314
     'hello' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6315
     '+' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6316
     '++' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6317
     '+++' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6318
     '|' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6319
     '?' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6320
     '_' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6321
     '_:' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6322
     '_:_:' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6323
     '<->' numArgs
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6324
    "
2051
08fd6a693ee3 ask Scanner for valid binarySelector characters in numArgs
Claus Gittinger <cg@exept.de>
parents: 1978
diff changeset
  6325
10088
b8e69093ca13 code cleanup
Claus Gittinger <cg@exept.de>
parents: 10061
diff changeset
  6326
    "Modified: / 13-10-2006 / 11:52:33 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6327
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6328
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6329
partsIfSelector
14629
6491c3b25cd5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14609
diff changeset
  6330
    "treat the receiver as a message selector, return a collection of parts.
6491c3b25cd5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14609
diff changeset
  6331
     Notice: this is more tolerant than Smalltalk's syntax would suggest;
6491c3b25cd5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14609
diff changeset
  6332
     especially it allows for empty keyword parts between colons.
6491c3b25cd5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14609
diff changeset
  6333
     This is not (and should not be checked here), to allow parsing of
6491c3b25cd5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14609
diff changeset
  6334
     degenerate selectors as appearing with objectiveC."
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6335
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6336
    |idx1 "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6337
     coll idx2 sz|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6338
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6339
    coll := OrderedCollection new.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6340
    idx1 := 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6341
    sz := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6342
    [true] whileTrue:[
14629
6491c3b25cd5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14609
diff changeset
  6343
        idx2 := self indexOf:$: startingAt:idx1.
6491c3b25cd5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14609
diff changeset
  6344
        (idx2 == 0 or:[idx2 == sz]) ifTrue:[
6491c3b25cd5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14609
diff changeset
  6345
            coll add:(self copyFrom:idx1).
6491c3b25cd5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14609
diff changeset
  6346
            ^ coll
6491c3b25cd5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14609
diff changeset
  6347
        ].
6491c3b25cd5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14609
diff changeset
  6348
        coll add:(self copyFrom:idx1 to:idx2).
6491c3b25cd5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14609
diff changeset
  6349
        idx1 := idx2 + 1
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  6350
    ].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6351
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6352
    "
14631
501217c542a5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14629
diff changeset
  6353
     'foo:' partsIfSelector            
501217c542a5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14629
diff changeset
  6354
     'foo:bar:' partsIfSelector    
501217c542a5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14629
diff changeset
  6355
     'foo::::' partsIfSelector     
501217c542a5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14629
diff changeset
  6356
     #foo:bar: partsIfSelector     
501217c542a5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14629
diff changeset
  6357
     'hello' partsIfSelector       
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6358
     '+' partsIfSelector
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6359
    "
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  6360
! !
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  6361
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6362
!CharacterArray methodsFor:'tracing'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6363
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6364
traceInto:aRequestor level:level from:referrer
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6365
    "double dispatch into tracer, passing my type implicitely in the selector"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6366
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6367
    ^ aRequestor traceCharacterArray:self level:level from:referrer
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6368
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6369
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6370
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6371
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6372
!CharacterArray methodsFor:'visiting'!
8395
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  6373
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  6374
acceptVisitor:aVisitor with:aParameter
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  6375
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  6376
    ^ aVisitor visitString:self with:aParameter
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  6377
! !
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  6378
1849
9f35f5934ec6 added msdos-latin1 en/decoder (code = #msdos850)
Claus Gittinger <cg@exept.de>
parents: 1669
diff changeset
  6379
!CharacterArray class methodsFor:'documentation'!
629
2ceefe9b5a19 version at the end
Claus Gittinger <cg@exept.de>
parents: 608
diff changeset
  6380
2ceefe9b5a19 version at the end
Claus Gittinger <cg@exept.de>
parents: 608
diff changeset
  6381
version
15055
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6382
    ^ '$Header: /cvs/stx/stx/libbasic/CharacterArray.st,v 1.499 2013-04-03 19:12:25 cg Exp $'
12058
80a7dee97d3c comments
Claus Gittinger <cg@exept.de>
parents: 11955
diff changeset
  6383
!
80a7dee97d3c comments
Claus Gittinger <cg@exept.de>
parents: 11955
diff changeset
  6384
80a7dee97d3c comments
Claus Gittinger <cg@exept.de>
parents: 11955
diff changeset
  6385
version_CVS
15055
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6386
    ^ '$Header: /cvs/stx/stx/libbasic/CharacterArray.st,v 1.499 2013-04-03 19:12:25 cg Exp $'
629
2ceefe9b5a19 version at the end
Claus Gittinger <cg@exept.de>
parents: 608
diff changeset
  6387
! !
6809
72fee17c14b1 utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6743
diff changeset
  6388
14606
1aaaa6d79e54 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14592
diff changeset
  6389
2728
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
  6390
CharacterArray initialize!