CharacterArray.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Fri, 30 Nov 2012 17:19:23 +0000
branchjv
changeset 17993 956342c369a2
parent 17976 50c2416f962a
child 18011 deb0c3355881
permissions -rw-r--r--
Merged with /trunk
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
17928
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
    14
ByteArray subclass:#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
17993
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
   198
    (str peekOrNil == $') ifTrue:[
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
   199
        str next.
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
   200
        collected := self writeStream.
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
   201
        [str atEnd] whileFalse:[
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
   202
            char := str next.
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
   203
            char == $' ifTrue:[
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
   204
                "/ look for another quote
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
   205
                str peekOrNil ~~ $' ifTrue:[
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
   206
                    "end of string reached"
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
   207
                    ^ collected contents.
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
   208
                ].
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
   209
                "eat doubled quote"
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
   210
                str next.
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
   211
            ].
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
   212
            ((char ~~ Character return) or:[str peekOrNil ~~ Character lf]) ifTrue:[
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
   213
                "compress CRLF to LF, but keep a single CR"
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
   214
                collected nextPut:char.
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
   215
            ].
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
   216
        ].
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
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
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   232
writeStreamClass
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   233
    "the class used by writeStream"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   234
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
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
    "
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   240
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
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
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   367
	mSize := mStop - mStart + 1.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   368
	sSize := sStop - sStart + 1.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   369
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   370
	"empty strings match"
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   371
	(mSize == 0) ifTrue:[^ (sSize == 0)].
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   372
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   373
	matchEntry := matchScanArray at:mStart.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   374
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   375
	"/ the most common case first:
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   376
	(sSize ~~ 0
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   377
	and:[(checkChar := (aString at:sStart)) = matchEntry]) ifTrue:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   378
	    "advance by one and continue"
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   379
	    mStart := mStart + 1.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   380
	    sStart := sStart + 1
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   381
	] ifFalse:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   382
	    (matchEntry == #any) ifTrue:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   383
		"restString empty -> no match"
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   384
		(sSize == 0) ifTrue:[^ false].
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   385
		"# matches single character"
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   386
		((sSize == 1) and:[mSize == 1]) ifTrue:[^ true].
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   387
		"advance by one and continue"
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   388
		mStart := mStart + 1.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   389
		sStart := sStart + 1
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   390
	    ] ifFalse:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   391
		(matchEntry == #anyString) ifTrue:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   392
		    "* alone matches anything"
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   393
		    (mSize == 1) ifTrue:[^ true].
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   394
		    "restString empty & matchString not empty -> no match"
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   395
		    (sSize == 0) ifTrue:[^ false].
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   396
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   397
		    "
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   398
		     try to avoid some of the recursion by checking last
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   399
		     character and continue with shortened strings if possible
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   400
		    "
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   401
		    quickCheck := false.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   402
		    (mStop >= mStart) ifTrue:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   403
			matchLast := matchScanArray at:mStop.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   404
			(matchLast ~~ #anyString) ifTrue:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   405
			    (matchLast == #any) ifTrue:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   406
				quickCheck := true
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   407
			    ] ifFalse:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   408
				matchLast == (aString at:sStop) ifTrue:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   409
				    quickCheck := true
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   410
				] ifFalse:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   411
				    matchLast isString ifTrue:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   412
					quickCheck := matchLast includes:(aString at:sStop)
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   413
				    ]
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   414
				]
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   415
			    ]
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   416
			]
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   417
		    ].
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   418
		    quickCheck ifTrue:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   419
			"
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   420
			 quickCheck ok, advance from the right
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   421
			"
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   422
			mStop := mStop - 1.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   423
			sStop := sStop - 1
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   424
		    ] ifFalse:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   425
			"/ no quick check;
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   426
			"/ look for the next character(s)
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   427
			"/ and try matching there
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   428
			"/ (to avoid recursion)
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   429
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   430
			mStart < mStop ifTrue:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   431
			    nextMatchEntry := matchScanArray at:mStart+1.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   432
			    nextMatchEntry isCharacter ifTrue:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   433
				sStart <= sStop ifTrue:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   434
				    [true] whileTrue:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   435
					ignoreCase ifFalse:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   436
					    index := aString indexOf:nextMatchEntry startingAt:sStart
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   437
					] ifTrue:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   438
					    index := aString findFirst:[:c | c asLowercase = nextMatchEntry asLowercase]
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   439
							   startingAt:sStart.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   440
					].
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   441
					(index == 0 or:[index > sStop]) ifTrue:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   442
					    ^ false
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   443
					].
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   444
					(self matchScan:matchScanArray
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   445
					      from:(mStart + 1)
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   446
					      to:mStop
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   447
					      with:aString
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   448
					      from:index
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   449
					      to:sStop
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   450
					      ignoreCase:ignoreCase
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   451
					) ifTrue:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   452
					    ^ true
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   453
					].
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   454
					sStart := index + 1.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   455
				    ]
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   456
				]
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   457
			    ]
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   458
			].
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   459
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   460
			"
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   461
			 no quick check possible;
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   462
			 loop over all possible substrings
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   463
			"
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   464
			index := sStart.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   465
			[index <= sStop] whileTrue:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   466
			    (self matchScan:matchScanArray
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   467
				  from:(mStart + 1)
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   468
				  to:mStop
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   469
				  with:aString
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   470
				  from:index
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   471
				  to:sStop
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   472
				  ignoreCase:ignoreCase
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   473
			    ) ifTrue:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   474
				^ true
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   475
			    ].
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   476
			    index := index + 1
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   477
			].
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   478
			^ false
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   479
		    ].
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   480
		] ifFalse:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   481
		    (matchEntry isString) ifTrue:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   482
			"testString empty -> no match"
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   483
			(sSize == 0) ifTrue:[^ false].
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   484
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   485
			included := false.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   486
			"/ checkChar := aString at:sStart.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   487
			included := matchEntry includes:checkChar.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   488
			included ifFalse:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   489
			    ignoreCase ifTrue:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   490
				checkChar isUppercase ifTrue:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   491
				    included := matchEntry includes:checkChar asLowercase.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   492
				] ifFalse:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   493
				    included := matchEntry includes:checkChar asUppercase.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   494
				]
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   495
			    ].
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   496
			].
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   497
			mStart := mStart + 1.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   498
			mSize := mSize - 1.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   499
			included ifFalse:[^ false].
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   500
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   501
			((sSize == 1) and:[mSize == 0]) ifTrue:[^ true].
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   502
		    ] ifFalse:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   503
			"/ must be single character
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   504
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   505
			"testString empty ?"
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   506
			(sSize == 0) ifTrue:[^ false].
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   507
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   508
			"first characters equal ?"
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   509
			"/ checkChar := aString at:sStart.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   510
			ignoreCase ifFalse:[^ false].
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   511
			(checkChar asUppercase ~= matchEntry asUppercase) ifTrue:[^ false].
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   512
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   513
			"advance and continue"
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   514
			mStart := mStart + 1.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   515
		    ].
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   516
		    "cut off 1st char and continue"
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   517
		    sStart := sStart + 1
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   518
		]
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   519
	    ]
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
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
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   529
	 matchScan:scanArray
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   530
	 from:1
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   531
	 to:scanArray size
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   532
	 with:s
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   533
	 from:1
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   534
	 to:s size
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
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
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   543
	 matchScan:scanArray
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   544
	 from:1
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   545
	 to:scanArray size
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   546
	 with:s
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   547
	 from:1
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   548
	 to:s size
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   549
	 ignoreCase:false
17847
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   550
    "
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   551
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   552
    "Modified: / 24-07-2011 / 07:17:03 / cg"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
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
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   680
!CharacterArray methodsFor:'Compatibility-ANSI'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   681
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   682
addLineDelimiters
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   683
    "Ansi compatibility - same as withCRs"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   684
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   685
    ^ self withCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   686
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   687
    "Modified: / 13.11.2001 / 19:16:25 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   688
! !
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
!CharacterArray methodsFor:'Compatibility-Dolphin'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   691
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   692
argumentCount
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   693
    "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
   694
     as selector would take."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   695
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   696
    ^  self numArgs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   697
!
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
copyExpanding:expandTable
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   700
    "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
   701
     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
   702
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   703
    |ds|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   704
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   705
    ds := WriteStream on:(self species new).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   706
    self do:[:eachChar |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   707
	|repl|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   708
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   709
	repl := expandTable at:eachChar ifAbsent:nil.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   710
	repl isNil ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   711
	    ds nextPut:eachChar
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   712
	] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   713
	    repl size == 0 ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   714
		ds nextPut:repl
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   715
	    ] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   716
		ds nextPutAll:repl
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   717
	    ]
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
    ].
6870
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   720
    ^ ds contents.
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   721
!
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
formatWith:aString
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   724
    "Compatibility method - do not use in new code.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   725
     same as #bindWith: for dolphin compatibility"
6870
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   726
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   727
    ^ self bindWith:aString
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   728
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
     'hello%1world' formatWith:'123'
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   731
    "
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
formatWith:arg1 with:arg2
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   735
    "Compatibility method - do not use in new code.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   736
     same as #bindWith: for dolphin compatibility"
6870
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   737
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   738
    ^ self bindWith:arg1 with:arg2
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   739
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
     'hello%1 %2world' formatWith:'123' with:234
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   742
    "
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
formatWith:arg1 with:arg2 with:arg3
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   746
    "Compatibility method - do not use in new code.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   747
     same as #bindWith: for dolphin compatibility"
6870
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   748
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   749
    ^ self bindWith:arg1 with:arg2 with:arg3
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   750
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
     'hello%1 %2 %3world' formatWith:'123' with:234 with:345
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   753
    "
6391
ff9f6df9ec4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6228
diff changeset
   754
! !
ff9f6df9ec4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6228
diff changeset
   755
7261
f35fc9cee675 method category rename
Claus Gittinger <cg@exept.de>
parents: 7247
diff changeset
   756
!CharacterArray methodsFor:'Compatibility-ST/V'!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   757
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   758
byteAt:index put:aByte
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   759
    "store a byte at given index.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   760
     This is an ST/V compatibility method."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   761
1333
d3fdca956f0d allow storing of 0-bytes (be careful with printing then ...)
Claus Gittinger <cg@exept.de>
parents: 1312
diff changeset
   762
"/    (aByte == 0) ifTrue:[
d3fdca956f0d allow storing of 0-bytes (be careful with printing then ...)
Claus Gittinger <cg@exept.de>
parents: 1312
diff changeset
   763
"/        "store a space instead"
d3fdca956f0d allow storing of 0-bytes (be careful with printing then ...)
Claus Gittinger <cg@exept.de>
parents: 1312
diff changeset
   764
"/        ^ 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
   765
"/    ].
11754
5132248cfd6e common definition of #byteAt:put between CharacterArray and Symbol
Stefan Vogel <sv@exept.de>
parents: 11632
diff changeset
   766
    ^ self basicAt:index put:(Character value:aByte)
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   767
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   768
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   769
     'hello' copy at:1 put:$H asciiValue; yourself
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   770
     'hello' copy byteAt:1 put:72; yourself
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   771
     'hello' copy byteAt:1 put:0; yourself
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   772
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   773
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   774
    "Modified: 6.5.1996 / 10:35:26 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   775
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   776
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   777
replChar:oldChar with:newChar
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   778
    "return a copy of the receiver, with all oldChars replaced
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   779
     by newChar.
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
3656
347ea0413b68 use #copyReplaceAll:with:
Claus Gittinger <cg@exept.de>
parents: 3630
diff changeset
   782
    ^ self copyReplaceAll:oldChar with:newChar
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   783
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   784
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   785
     '12345678901234567890' replChar:$0 with:$*
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   786
    "
3656
347ea0413b68 use #copyReplaceAll:with:
Claus Gittinger <cg@exept.de>
parents: 3630
diff changeset
   787
347ea0413b68 use #copyReplaceAll:with:
Claus Gittinger <cg@exept.de>
parents: 3630
diff changeset
   788
    "Modified: / 18.7.1998 / 22:52:57 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   789
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   790
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   791
replChar:oldChar withString:newString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   792
    "return a copy of the receiver, with all oldChars replaced
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   793
     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
   794
     This is an ST/V compatibility method."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   795
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   796
    |tmpStream|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   797
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   798
    tmpStream := WriteStream on:(self class new).
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   799
    self do:[:element |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   800
	element = oldChar ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   801
	    tmpStream nextPutAll:newString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   802
	] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   803
	    tmpStream nextPut:element
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   804
	].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   805
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   806
    ^ tmpStream contents
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   807
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   808
   "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   809
     '12345678901234567890' replChar:$0 withString:'foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   810
     'a string with spaces' replChar:$  withString:' foo '
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   811
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   812
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   813
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   814
replString:subString withString:newString
4244
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   815
    "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
   816
     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
   817
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
   818
    ^ self copyReplaceString:subString withString:newString
4244
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   819
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   820
   "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   821
     '12345678901234567890' replString:'123' withString:'OneTwoThree'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   822
     '12345678901234567890' replString:'123' withString:'*'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   823
     '12345678901234567890' replString:'234' withString:'foo'
4244
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   824
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   825
     ('a string with spaces' replChar:$  withString:' foo ')
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   826
	replString:'foo' withString:'bar'
4244
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   827
    "
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   828
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
   829
    "Modified: / 12-05-2004 / 12:00:27 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   830
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   831
9275
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   832
subString:start to:end
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   833
    ^ self copyFrom:start to:end
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   834
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   835
   "
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   836
     '12345678901234567890' subString:3 to:8
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   837
    "
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   838
!
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   839
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   840
trimBlanks
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   841
    "return a copy of the receiver without leading
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   842
     and trailing spaces.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   843
     This is an ST/V compatibility method."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   844
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   845
    ^ self withoutSpaces
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   846
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   847
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   848
     '    spaces at beginning' trimBlanks
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   849
     'spaces at end    ' trimBlanks
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   850
     '    spaces at beginning and end     ' trimBlanks
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   851
     'no spaces' trimBlanks
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   852
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   853
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   854
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   855
!CharacterArray methodsFor:'Compatibility-Squeak'!
4409
86e049b21f8d added #includesSubstring:caseSensitive:
Claus Gittinger <cg@exept.de>
parents: 4389
diff changeset
   856
6148
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   857
asDate
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   858
    "Many allowed forms, see Date.readFrom:"
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   859
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   860
    ^ Date readFrom: (ReadStream on: self)
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   861
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   862
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   863
     '30 Apr 1999' asDate dayName capitalized
6148
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   864
    "
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   865
!
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   866
8971
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
   867
asUrl
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
   868
    ^ self asURL
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
   869
!
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
   870
10840
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   871
asWideString
17976
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
   872
    "return a two-byte string containing the same characters as the receiver"
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
   873
10840
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   874
    ^ self asTwoByteString
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   875
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   876
    "
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   877
     'abc' asWideString
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   878
    "
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   879
!
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   880
4989
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   881
capitalized
17976
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
   882
    "same as asUppercaseFirst for Squeak compatibility"
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
   883
4989
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   884
    ^ self asUppercaseFirst
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   885
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   886
    "
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   887
     'hello' capitalized
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   888
    "
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   889
!
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   890
10841
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   891
caseInsensitiveLessOrEqual:aString
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   892
    ^ (self compareCaselessWith:aString) <= 0
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   893
!
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   894
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   895
caseSensitiveLessOrEqual:aString
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   896
    ^ self <= aString
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   897
!
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   898
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   899
charactersExactlyMatching:aString
17976
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
   900
    "return the number of characters I share as a prefix with the argument, aString"
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
   901
10841
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   902
    |idx nMax|
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   903
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   904
    nMax :=(self size) min:(aString size).
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   905
    idx := 1.
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   906
    [idx <= nMax] whileTrue:[
17976
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
   907
        (self at:idx) = (aString at:idx) ifFalse:[
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
   908
            ^ idx - 1
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
   909
        ].
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
   910
        idx := idx + 1.
10841
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   911
    ].
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   912
    ^ nMax
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
    "
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   915
     'abc' charactersExactlyMatching:'abc'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   916
     'abc' charactersExactlyMatching:'abcd'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   917
     'abcd' charactersExactlyMatching:'abc'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   918
     'abc' charactersExactlyMatching:'abd'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   919
     'abc' charactersExactlyMatching:'xxx'
10841
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   920
    "
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   921
!
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   922
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   923
endsWithDigit
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   924
    "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
   925
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   926
    ^ self size > 0 and: [self last isDigit]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   927
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   928
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   929
findDelimiters:delimiters startingAt:start
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   930
    "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
   931
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   932
    |idx|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   933
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   934
    idx := self indexOfAny:delimiters startingAt:start.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   935
    idx == 0 ifTrue:[^ self size + 1].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   936
    ^ idx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   937
"/start to: self size do: [:i |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   938
"/        |char|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   939
"/
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   940
"/        char := self at: i.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   941
"/        delimiters do: [:delim | delim = char ifTrue: [^ i]]
8971
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
   942
"/    ].
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
   943
"/    ^ self size + 1
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
   944
!
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
   945
17859
cc167a69671c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17851
diff changeset
   946
findTokens:delimiterOrDelimiters
7270
37248a67718a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7265
diff changeset
   947
    "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
   948
17859
cc167a69671c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17851
diff changeset
   949
    delimiterOrDelimiters size == 0 ifTrue:[
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   950
	^ self asCollectionOfSubstringsSeparatedBy:delimiterOrDelimiters
17859
cc167a69671c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17851
diff changeset
   951
    ] ifFalse:[
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
   952
	^ self asCollectionOfSubstringsSeparatedByAny:delimiterOrDelimiters
17859
cc167a69671c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17851
diff changeset
   953
    ].
7270
37248a67718a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7265
diff changeset
   954
37248a67718a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7265
diff changeset
   955
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   956
     'a|b#c||e' findTokens:#($# $|)
17859
cc167a69671c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17851
diff changeset
   957
     'a|b#c||e' findTokens:$|
cc167a69671c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17851
diff changeset
   958
    "
cc167a69671c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17851
diff changeset
   959
cc167a69671c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17851
diff changeset
   960
    "Modified: / 04-09-2011 / 20:31:21 / cg"
cc167a69671c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17851
diff changeset
   961
    "Modified (comment): / 05-09-2011 / 04:25:28 / cg"
4981
2ee8cd2c4c8e squeak compatibility
ps
parents: 4974
diff changeset
   962
!
2ee8cd2c4c8e squeak compatibility
ps
parents: 4974
diff changeset
   963
4974
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
   964
includesSubString:aString
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
   965
    "return true, if a substring is contained in the receiver.
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
   966
     The compare is case sensitive."
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
   967
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
   968
    ^ self includesString:aString
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
   969
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
   970
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   971
     'hello world' includesSubString:'Hel'
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   972
     'hello world' includesSubString:'hel'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   973
     'hello world' includesSubString:'llo'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   974
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   975
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   976
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   977
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   978
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   979
11178
668d5d9a4d5d added #includesSubString:caseSensitive:
sr
parents: 11062
diff changeset
   980
includesSubString:aString caseSensitive:caseSensitive
11179
178086a92325 *** empty log message ***
sr
parents: 11178
diff changeset
   981
    ^ self includesSubstring:aString caseSensitive:caseSensitive
11178
668d5d9a4d5d added #includesSubString:caseSensitive:
sr
parents: 11062
diff changeset
   982
!
668d5d9a4d5d added #includesSubString:caseSensitive:
sr
parents: 11062
diff changeset
   983
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   984
includesSubstring:aString caseSensitive:caseSensitive
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
   985
    "return true, if a substring is contained in the receiver.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   986
     The argument, caseSensitive controls if case is ignored in the compare."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   987
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   988
    "/ for now,  a q&d hack ...
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   989
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   990
    caseSensitive ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   991
	^ self asLowercase includesString:aString asLowercase
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   992
    ].
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
   993
    ^ self includesString:aString
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
   994
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
   995
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   996
     'hello world' includesSubstring:'Hel' caseSensitive:true
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   997
     'hello world' includesSubstring:'Hel' caseSensitive:false
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   998
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   999
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1000
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1001
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1002
!
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1003
6979
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1004
isAllDigits
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1005
    "Answer whether the receiver's characters are all digits"
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1006
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1007
    ^ self conform:[:eachChar | eachChar isDigit]
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1008
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1009
    "
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1010
     'hello world' isAllDigits
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1011
     '12344' isAllDigits
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1012
    "
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1013
!
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1014
17859
cc167a69671c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17851
diff changeset
  1015
isWideString
cc167a69671c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17851
diff changeset
  1016
    ^ self bitsPerCharacter > 8
cc167a69671c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17851
diff changeset
  1017
cc167a69671c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17851
diff changeset
  1018
    "Created: / 05-09-2011 / 23:13:16 / cg"
cc167a69671c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17851
diff changeset
  1019
!
cc167a69671c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17851
diff changeset
  1020
4890
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1021
lastSpacePosition
17976
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  1022
    "return the index of the last space character; 0 if there is none"
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  1023
4890
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1024
    ^ self lastIndexOfSeparator
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1025
!
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1026
7022
0c3c73f83b7f padded:to:with: - for squeak
penk
parents: 7020
diff changeset
  1027
padded:leftOrRight to:paddedSize with:padCharacter
17928
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  1028
    "pad left (leftOrRight==#left) or right"
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  1029
7022
0c3c73f83b7f padded:to:with: - for squeak
penk
parents: 7020
diff changeset
  1030
    leftOrRight == #left ifTrue:[
17928
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  1031
        ^ self leftPaddedTo:paddedSize with:padCharacter
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1032
    ].
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1033
    ^ self paddedTo:paddedSize with:padCharacter
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1034
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1035
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1036
     'hello' padded:#right to:10 with:$.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1037
     'hello' padded:#left to:10 with:$.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1038
    "
17928
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  1039
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  1040
    "Modified (comment): / 07-03-2012 / 16:31:33 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1041
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1042
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1043
skipDelimiters:delimiters startingAt:start
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1044
    "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
  1045
     that does NOT match one of the delimiters.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1046
     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
  1047
     Assumes the delimiters to be a non-empty string."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1048
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1049
    start to:self size do:[:i |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1050
	delimiters detect:[:delim | delim = (self at:i) ] ifNone:[ ^ i ]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1051
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1052
    ^ self size + 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1053
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
     '123***7890' skipDelimiters:'*' startingAt:4
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1056
     '123***7890' skipDelimiters:'*' startingAt:3
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1057
     '123***7890' skipDelimiters:'*' startingAt:10
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1058
     '123*******' skipDelimiters:'*' startingAt:10
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1059
    "
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1060
!
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1061
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1062
substrings
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1063
    ^ self asCollectionOfWords
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1064
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1065
    "
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1066
     'foo bar baz' substrings
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1067
    "
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1068
!
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1069
17747
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  1070
substringsSeparatedBy:separatorCharacter
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  1071
    ^ self asCollectionOfSubstringsSeparatedBy:separatorCharacter
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  1072
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  1073
    "
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  1074
     'foo bar, baz' substringsSeparatedBy:$,
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  1075
    "
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  1076
!
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  1077
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1078
truncateTo:smallSize
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1079
    "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
  1080
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1081
    self size <= smallSize ifTrue:[^ self].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1082
    ^ self copyFrom: 1 to: smallSize
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1083
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1084
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1085
     'hello world' truncateTo:5
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1086
     'hello' truncateTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1087
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1088
     'hello world' copyTo:5
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1089
     'hello' copyTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1090
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1091
!
5795
d67a8ff4d98e added #truncateTo:
Claus Gittinger <cg@exept.de>
parents: 5794
diff changeset
  1092
4890
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1093
withBlanksTrimmed
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1094
    "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
  1095
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1096
    ^ self withoutSpaces
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1097
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1098
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1099
     '  hello    world    ' withBlanksTrimmed
4890
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1100
    "
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1101
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1102
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1103
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1104
!
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1105
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1106
withNoLineLongerThan: aNumber
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1107
    "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
  1108
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1109
    | listOfLines currentLast currentStart resultString putativeLast putativeLine crPosition |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1110
17976
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  1111
    (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
  1112
    listOfLines _ OrderedCollection new.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1113
    currentLast _ 0.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1114
    [currentLast < self size] whileTrue:
17976
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  1115
            [currentStart _ currentLast + 1.
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  1116
            putativeLast _ (currentStart + aNumber - 1) min: self size.
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  1117
            putativeLine _ self copyFrom: currentStart to: putativeLast.
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  1118
            (crPosition _ putativeLine indexOf: Character cr) > 0 ifTrue:
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  1119
                    [putativeLast _ currentStart + crPosition - 1.
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  1120
                    putativeLine _ self copyFrom: currentStart to: putativeLast].
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  1121
            currentLast _ putativeLast == self size
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  1122
                    ifTrue:
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  1123
                            [putativeLast]
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  1124
                    ifFalse:
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  1125
                            [currentStart + putativeLine lastSpacePosition - 1].
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  1126
            currentLast <= currentStart ifTrue:
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  1127
                    ["line has NO spaces; baleout!!"
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  1128
                    currentLast _ putativeLast].
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  1129
            listOfLines add: (self copyFrom: currentStart to: currentLast) withBlanksTrimmed].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1130
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1131
    listOfLines size > 0 ifFalse: [^ ''].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1132
    resultString _ listOfLines first.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1133
    2 to: listOfLines size do:
17976
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  1134
            [:i | resultString _ resultString, Character cr asString, (listOfLines at: i)].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1135
    ^ resultString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1136
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1137
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1138
     #(5 7 20) collect:
17976
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  1139
        [:i | 'Fred the bear went down to the brook to read his book in silence' withNoLineLongerThan: i]
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  1140
    "
10883
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1141
!
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1142
17734
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  1143
withSqueakLineEndings
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  1144
    "assume the string is textual, and that CR, LF, and CRLF are all
17734
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  1145
    valid line endings.  Replace each occurence with a single CR"
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  1146
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  1147
    ^ self asStringCollection asStringWith:Character cr.
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  1148
!
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  1149
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1150
withoutLeading: char
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1151
    "return a copy of myself without leading a char.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1152
     Returns an empty string, if the receiver consist only of a char."
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1153
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1154
    ^ self withoutLeadingForWhich:[:ch | ch = char]
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1155
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1156
    "
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  1157
     '****foo****' withoutLeading: $*
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  1158
     'foo****'     withoutLeading: $*
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  1159
     '*'           withoutLeading: $*
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  1160
     ''            withoutLeading: $*
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  1161
     '****foo'     withoutLeading: $*
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  1162
     '*******'     withoutLeading: $*
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  1163
     'foo'         withoutLeading: $*
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  1164
     'f***o***o'   withoutLeading: $*
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1165
     ('**' , Character tab asString , '*foo***') withoutLeading: $* inspect
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1166
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1167
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1168
11565
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1169
withoutTrailing:char
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1170
    "return a copy of myself without trailing char.
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1171
     Returns an empty string, if the receiver consist only of char."
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1172
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1173
    ^ self withoutTrailingForWhich:[:ch | ch = char]
10883
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1174
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1175
    "
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  1176
     '    foo....' withoutTrailing:$.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  1177
     'foo....'     withoutTrailing:$.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  1178
     '    foo'     withoutTrailing:$.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  1179
     '.......'     withoutTrailing:$.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  1180
     'foo'         withoutTrailing:$.
11565
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1181
    "
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1182
!
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1183
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1184
withoutTrailingBlanks
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1185
    "return a copy of myself without trailing spaces.
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1186
     Notice: this does NOT remove tabs, newline or any other whitespace.
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1187
     Returns an empty string, if the receiver consist only of spaces."
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1188
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1189
    ^ self withoutTrailing:Character space
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1190
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1191
    "
10883
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1192
     '    foo    ' withoutTrailingBlanks
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1193
     'foo    '     withoutTrailingBlanks
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1194
     '    foo'     withoutTrailingBlanks
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1195
     '       '     withoutTrailingBlanks
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1196
     'foo'         withoutTrailingBlanks
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1197
     ('  ' , Character tab asString , ' foo   ') withoutTrailingBlanks inspect
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1198
     ('   foo' , Character tab asString) withoutTrailingBlanks inspect
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1199
    "
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1200
! !
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1201
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1202
!CharacterArray methodsFor:'Compatibility-V''Age'!
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1203
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1204
addLineDelimiter
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1205
    "replace all '\'-characters by line delimiter (cr) - characters.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1206
     This has been added for VisualAge compatibility."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1207
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1208
    ^ self withCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1209
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1210
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1211
bindWith:aString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1212
    "return a copy of the receiver, where a '%1' escape is
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1213
     replaced by aString.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1214
     This has been added for VisualAge compatibility."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1215
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1216
    ^ self expandPlaceholdersWith:(Array with:aString)
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
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1219
     'do you like %1 ?' bindWith:'smalltalk'
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
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1222
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1223
bindWith:string1 with:string2
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1224
    "return a copy of the receiver, where a '%1' escape is
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1225
     replaced by string1 and '%2' is replaced by string2.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1226
     This has been added for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1227
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1228
    ^ self expandPlaceholdersWith:(Array with:string1 with:string2)
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1229
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1230
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1231
     'do you prefer %1 or rather %2 ?'
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1232
	bindWith:'smalltalk' with:'c++'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1233
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1234
!
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1235
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1236
bindWith:str1 with:str2 with:str3
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1237
    "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
  1238
     are replaced by str1, str2 and str3 respectively.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1239
     This has been added for VisualAge compatibility."
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
    ^ self expandPlaceholdersWith:(Array with:str1 with:str2 with:str3)
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1242
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1243
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1244
     'do you prefer %1 or rather %2 (not talking about %3) ?'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1245
	bindWith:'smalltalk' with:'c++' with:'c'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1246
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1247
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1248
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1249
bindWith:str1 with:str2 with:str3 with:str4
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1250
    "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
  1251
     are replaced by str1, str2, str3 and str4 respectively.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1252
     This has been added for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1253
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1254
    ^ self expandPlaceholdersWith:(Array with:str1 with:str2 with:str3 with:str4)
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1255
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1256
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1257
     '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
  1258
	bindWith:'smalltalk' with:'c++' with:'c' with:'assembler'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1259
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1260
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1261
2344
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1262
bindWith:str1 with:str2 with:str3 with:str4 with:str5
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1263
    "return a copy of the receiver, where a '%1' .. '%5' escapes
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1264
     are replaced by str1 .. str5 respectively.
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1265
     This has been added for VisualAge compatibility."
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1266
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1267
    ^ 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
  1268
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1269
    "Created: 31.1.1997 / 16:25:42 / cg"
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1270
!
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1271
5343
bac9bc59a698 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5342
diff changeset
  1272
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
  1273
    "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
  1274
     are replaced by str1 .. str6 respectively.
5343
bac9bc59a698 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5342
diff changeset
  1275
     This has been added for VisualAge compatibility."
bac9bc59a698 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5342
diff changeset
  1276
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1277
    ^ self expandPlaceholdersWith:(Array with:str1 with:str2
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1278
					 with:str3 with:str4
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1279
					 with:str5 with:str6)
11524
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1280
!
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1281
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1282
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
  1283
    "return a copy of the receiver, where a '%1' .. '%7' escapes
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1284
     are replaced by str1 .. str7 respectively.
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1285
     This has been added for VisualAge compatibility."
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1286
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1287
    ^ self expandPlaceholdersWith:(Array with:str1 with:str2
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1288
					 with:str3 with:str4
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1289
					 with:str5 with:str6
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1290
					 with:str7)
5343
bac9bc59a698 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5342
diff changeset
  1291
!
bac9bc59a698 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5342
diff changeset
  1292
17921
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  1293
bindWith:str1 with:str2 with:str3 with:str4 with:str5 with:str6 with:str7 with:str8
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  1294
    "return a copy of the receiver, where a '%1' .. '%8' escapes
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  1295
     are replaced by str1 .. str8 respectively.
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  1296
     This has been added for VisualAge compatibility."
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  1297
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  1298
    ^ self expandPlaceholdersWith:(Array with:str1 with:str2
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  1299
                                         with:str3 with:str4
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  1300
                                         with:str5 with:str6
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  1301
                                         with:str7 with:str8)
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  1302
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  1303
    "Created: / 06-02-2012 / 10:33:18 / cg"
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  1304
!
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  1305
17922
701184329b01 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17921
diff changeset
  1306
bindWith:str1 with:str2 with:str3 with:str4 with:str5 with:str6 with:str7 with:str8 with:str9
701184329b01 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17921
diff changeset
  1307
    "return a copy of the receiver, where a '%1' .. '%9' escapes
701184329b01 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17921
diff changeset
  1308
     are replaced by str1 .. str9 respectively.
701184329b01 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17921
diff changeset
  1309
     This has been added for VisualAge compatibility."
701184329b01 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17921
diff changeset
  1310
701184329b01 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17921
diff changeset
  1311
    ^ self expandPlaceholdersWith:(Array with:str1 with:str2
701184329b01 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17921
diff changeset
  1312
                                         with:str3 with:str4
701184329b01 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17921
diff changeset
  1313
                                         with:str5 with:str6
701184329b01 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17921
diff changeset
  1314
                                         with:str7 with:str8
701184329b01 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17921
diff changeset
  1315
                                         with:str9)
701184329b01 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17921
diff changeset
  1316
701184329b01 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17921
diff changeset
  1317
    "Created: / 14-02-2012 / 17:42:31 / cg"
701184329b01 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17921
diff changeset
  1318
!
701184329b01 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17921
diff changeset
  1319
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1320
bindWithArguments:anArrayOfStrings
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1321
    "return a copy of the receiver, where a '%i' escape
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1322
     is replaced by the coresponding string from the argument array.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1323
     '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
  1324
     This has been added for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1325
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1326
    ^ self expandPlaceholdersWith:anArrayOfStrings
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1327
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1328
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1329
     'do you prefer %1 or rather %2 (not talking about %3) ?'
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  1330
	bindWithArguments:#('smalltalk' 'c++' 'c')
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1331
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1332
     'do you %(what) ?'
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  1333
	bindWithArguments:(Dictionary new at:#'what' put:'understand'; yourself)
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1334
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1335
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1336
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1337
subStrings
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1338
    "return an array consisting of all words contained in the receiver.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1339
     Words are separated by whitespace.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1340
     This has been added for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1341
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1342
    ^ self asCollectionOfWords
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1343
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1344
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1345
     'hello world, this is smalltalk' subStrings
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
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1348
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1349
subStrings:separatorCharacter
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1350
    "return an array consisting of all words contained in the receiver.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1351
     Words are separated by separatorCharacter.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1352
     This has been added for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1353
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1354
    ^ self asCollectionOfSubstringsSeparatedBy:separatorCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1355
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1356
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1357
     'foo:bar:baz:smalltalk' subStrings:$:
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1358
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1359
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1360
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1361
trimSeparators
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1362
    "return a copy of the receiver without leading and trailing whiteSpace"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1363
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1364
    ^ self withoutSeparators
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
!CharacterArray methodsFor:'Compatibility-VW'!
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1368
6139
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1369
asLogicalFileSpecification
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1370
    ^ self asFilename
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1371
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1372
    "Created: / 30.10.2001 / 17:29:53 / cg"
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1373
!
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1374
6119
b6cee2c2b2ea +asQualifiedReference
Claus Gittinger <cg@exept.de>
parents: 5964
diff changeset
  1375
asQualifiedReference
b6cee2c2b2ea +asQualifiedReference
Claus Gittinger <cg@exept.de>
parents: 5964
diff changeset
  1376
    ^ BindingReference pathString:(self string)
b6cee2c2b2ea +asQualifiedReference
Claus Gittinger <cg@exept.de>
parents: 5964
diff changeset
  1377
b6cee2c2b2ea +asQualifiedReference
Claus Gittinger <cg@exept.de>
parents: 5964
diff changeset
  1378
!
b6cee2c2b2ea +asQualifiedReference
Claus Gittinger <cg@exept.de>
parents: 5964
diff changeset
  1379
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1380
expandMacros
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1381
    "ST80 compatibility - expand '<..>' macros with
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1382
     argument strings. Similar to #bindWith:.
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1383
     Read the comment in #expandMacrosWithArguments: about
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1384
     limited compatibility issues."
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1385
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1386
    ^ self expandMacrosWithArguments:#()
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1387
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1388
    "
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1389
     'hello<n>foo' expandMacros
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1390
    "
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1391
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1392
    "Modified: / 18.6.1998 / 16:03:02 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1393
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1394
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1395
expandMacrosWith:arg
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1396
    "ST80 compatibility - expand '<..>' macros with
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1397
     argument strings. Similar to #bindWith:.
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1398
     Read the comment in #expandMacrosWithArguments: about
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1399
     limited compatibility issues."
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1400
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1401
    ^ self expandMacrosWithArguments:(Array with:arg)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1402
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1403
    "Created: / 1.11.1997 / 13:01:28 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1404
    "Modified: / 1.11.1997 / 13:30:50 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1405
!
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1406
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1407
expandMacrosWith:arg1 with:arg2
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1408
    "ST80 compatibility - expand '<..>' macros with
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1409
     argument strings. Similar to #bindWith:.
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1410
     Read the comment in #expandMacrosWithArguments: about
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1411
     limited compatibility issues."
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1412
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1413
    ^ self expandMacrosWithArguments:(Array with:arg1 with:arg2)
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1414
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1415
    "Modified: / 6.7.1998 / 21:58:14 / cg"
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
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1418
expandMacrosWith:arg1 with:arg2 with:arg3
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1419
    "ST80 compatibility - expand '<..>' macros with
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1420
     argument strings. Similar to #bindWith:.
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1421
     Read the comment in #expandMacrosWithArguments: about
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1422
     limited compatibility issues."
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1423
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1424
    ^ self expandMacrosWithArguments:(Array with:arg1 with:arg2 with:arg3)
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1425
!
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1426
10353
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1427
expandMacrosWith:arg1 with:arg2 with:arg3 with:arg4
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1428
    "ST80 compatibility - expand '<..>' macros with
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1429
     argument strings. Similar to #bindWith:.
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1430
     Read the comment in #expandMacrosWithArguments: about
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1431
     limited compatibility issues."
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1432
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1433
    ^ 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
  1434
!
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1435
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1436
expandMacrosWithArguments:argArray
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1437
    "ST80 compatibility - expand '<..>' macros with
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1438
     argument strings. Similar to #bindWith:.
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1439
     WARNING: possibly not all ST80 expansions are supported here."
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1440
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1441
    "/ supported expansions:
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1442
    "/
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1443
    "/   <#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
  1444
    "/   <#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
  1445
    "/   <#?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
  1446
    "/              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
  1447
    "/   <n>        replace by a newLine character
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1448
    "/   <t>        replace by a tab character
6834
eba4b58b8692 fixed expandMacros (%-escape)
Claus Gittinger <cg@exept.de>
parents: 6810
diff changeset
  1449
    "/   %X         the X character itself
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1450
8999
f3fda66ea51e #expandMacrosWithArguments: - be mor friendly to xml strings.
Stefan Vogel <sv@exept.de>
parents: 8971
diff changeset
  1451
    |in out c fmt nr arg s1 s2 peekc|
5964
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
    in := self readStream.
10721
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1454
    out := CharacterWriteStream on:(self species uninitializedNew:self size).
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1455
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1456
    [in atEnd] whileFalse:[
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1457
	c := in next.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1458
	c == $% ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1459
	    c := in next.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1460
	    out nextPut:c
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1461
	] ifFalse:[c ~~ $< ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1462
	    out nextPut:c.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1463
	] ifFalse:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1464
	    peekc := in peek.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1465
	    [peekc == $<] whileTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1466
		out nextPut:$<.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1467
		peekc := in nextPeek.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1468
	    ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1469
	    peekc == $n ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1470
		peekc := in nextPeek.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1471
		peekc == $> ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1472
		    in next.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1473
		    out cr.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1474
		] ifFalse:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1475
		    out nextPutAll:'<n'.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1476
		]
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1477
	    ] ifFalse:[peekc == $t ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1478
		peekc := in nextPeek.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1479
		peekc == $> ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1480
		    in next.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1481
		    out tab.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1482
		] ifFalse:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1483
		    out nextPutAll:'<t'.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1484
		]
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1485
	    ] ifFalse:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1486
		peekc isDigit ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1487
		    "start an argument expansion ..."
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1488
		    nr := Integer readFrom:in onError:nil.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1489
		    nr isNil ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1490
			"this cannot happen (there is at least one digit)"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1491
			self error:'invalid format' mayProceed:true.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1492
			^ self
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1493
		    ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1494
		    fmt := in next.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1495
		    (fmt ~~ $? and:[in peek ~~ $>]) ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1496
			out nextPut:$<.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1497
			nr printOn:out.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1498
			out nextPut:fmt.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1499
		    ] ifFalse:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1500
			(nr between:1 and:argArray size) ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1501
			    arg := argArray at:nr.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1502
			] ifFalse:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1503
			    arg := ''
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1504
			].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1505
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1506
			fmt == $p ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1507
			    "expand with args printString"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1508
			    arg printOn:out.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1509
			] ifFalse:[fmt == $s ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1510
			    "expand with arg itself"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1511
			    arg isText ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1512
				out contentsSpecies isText ifFalse:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1513
				    out := (WriteStream on:Text new) nextPutAll:out contents; yourself.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1514
				].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1515
				out nextPutAll:arg.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1516
			    ] ifFalse:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1517
				out nextPutAll:arg "asString" string.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1518
			    ]
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1519
			] ifFalse:[fmt == $? ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1520
			    s1 := in upTo:$:.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1521
			    s2 := in nextUpTo:$>.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1522
			    arg == true ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1523
				out nextPutAll:s1
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1524
			    ] ifFalse:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1525
				out nextPutAll:s2
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1526
			    ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1527
			] ifFalse:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1528
			    "what does VW do here ?"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1529
			    self error:'invalid format' mayProceed:true.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1530
			    ^ self
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1531
			]]].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1532
			c := in next.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1533
			c ~~ $> ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1534
			    "what does VW do here ?"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1535
			    self error:'invalid format' mayProceed:true.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1536
			    ^ self
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1537
			]
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1538
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1539
		    ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1540
		] ifFalse:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1541
		    out nextPut:$<.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1542
		].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1543
	    ]].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1544
	]].
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1545
    ].
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1546
    ^ out contents
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1547
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1548
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1549
     'hello <1s> how are you' expandMacrosWith:(OperatingSystem getLoginName)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1550
     'one plus one is <1p>' expandMacrosWith:2
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1551
    "
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1552
10721
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1553
    "Modified: / 18-09-2007 / 22:50:43 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1554
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1555
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1556
isCharacters
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1557
    "added for visual works compatibility"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1558
    ^ true
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1559
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1560
17976
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  1561
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1562
!CharacterArray methodsFor:'character searching'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1563
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1564
includesMatchCharacters
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  1565
    "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
  1566
     for match operations; false if not.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1567
     Here, do not care for $\ escapes"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1568
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1569
    ^ self includesAny:'*#['
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1570
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1571
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1572
     '*foo' includesMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1573
     '\*foo' includesMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1574
     '\*foo' includesUnescapedMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1575
     '*foo' includesMatchCharacters
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1576
     '\\*foo' includesMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1577
     'foo*' includesMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1578
     'foo\*' includesMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1579
     'foo\' includesMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1580
    "
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
    "Modified: 2.4.1997 / 18:12:34 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1583
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1584
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1585
includesSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1586
    "return true, if the receiver contains any whitespace characters"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1587
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1588
    ^ (self indexOfSeparator ~~ 0)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1589
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1590
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1591
     'hello world' includesSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1592
     'helloworld' includesSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1593
    "
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
includesUnescapedMatchCharacters
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1597
    "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
  1598
     for match operations; false if not.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1599
     Here, care for $\ escapes"
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1600
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  1601
    |idx sz specialChars escape|
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1602
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1603
    idx := 1.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1604
    sz := self size.
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  1605
    specialChars := '*#[\'.
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  1606
    (escape := self class matchEscapeCharacter) ~~ $\ ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1607
	specialChars := specialChars copy.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1608
	specialChars at:specialChars size put:escape
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  1609
    ].
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  1610
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1611
    [true] whileTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1612
	idx := self indexOfAny:specialChars startingAt:idx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1613
	idx == 0 ifTrue:[^ false].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1614
	(self at:idx) == escape ifFalse:[^ true].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1615
	idx := idx + 2.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1616
	idx > sz ifTrue:[^ false].
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1617
    ].
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1618
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1619
    "
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1620
     '*foo' includesUnescapedMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1621
     '\*foo' includesUnescapedMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1622
     '\\foo' includesUnescapedMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1623
     '\\\$foo' includesUnescapedMatchCharacters
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1624
     '*foo' includesUnescapedMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1625
     '\\*foo' includesUnescapedMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1626
     'foo*' includesUnescapedMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1627
     'foo\*' includesUnescapedMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1628
     'foo\' includesUnescapedMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1629
    "
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1630
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1631
    "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
  1632
    "Created: 2.4.1997 / 17:23:26 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1633
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1634
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1635
indexOfControlCharacterStartingAt:startIndex
3668
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1636
    "return the index of the next control character;
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1637
     starting the search at startIndex, searching forward;
3668
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1638
     that is a character with asciiValue < 32.
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1639
     Return 0 if none is found."
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1640
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1641
    |start  "{ Class: SmallInteger }"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1642
     mySize "{ Class: SmallInteger }"|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1643
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1644
    start := startIndex.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1645
    mySize := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1646
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1647
    start to:mySize do:[:index |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1648
	(self at:index) isControlCharacter ifTrue:[^ index]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1649
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1650
    ^ 0
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1651
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1652
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1653
     'hello world' asTwoByteString            indexOfControlCharacterStartingAt:1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1654
     'hello world\foo' withCRsasTwoByteString indexOfControlCharacterStartingAt:1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1655
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1656
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1657
    "Modified: / 21.7.1998 / 17:25:07 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1658
!
3668
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1659
8541
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1660
indexOfNonSeparator
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1661
    "return the index of the first non-whitespace character.
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1662
     return 0 if no non-separator was found"
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1663
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1664
    ^ self indexOfNonSeparatorStartingAt:1.
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1665
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1666
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1667
     '    hello world' indexOfNonSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1668
     '    ' indexOfNonSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1669
     'a   ' indexOfNonSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1670
     'abc' indexOfNonSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1671
     ' ' indexOfNonSeparator
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1672
     '' indexOfNonSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1673
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1674
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1675
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1676
indexOfNonSeparatorStartingAt:startIndex
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1677
    "return the index of the next non-whitespace character,
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1678
     starting the search at startIndex, searching forward;
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1679
     return 0 if no non-separator was found"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1680
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1681
    |start  "{ Class: SmallInteger }"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1682
     mySize "{ Class: SmallInteger }"|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1683
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1684
    start := startIndex.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1685
    mySize := self size.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1686
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1687
    start to:mySize do:[:index |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1688
	(self at:index) isSeparator ifFalse:[^ index]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1689
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1690
    ^ 0
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
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1693
     '    hello world' indexOfNonSeparatorStartingAt:1
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1694
     '    ' indexOfNonSeparatorStartingAt:1
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1695
     'a   ' indexOfNonSeparatorStartingAt:2
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1696
    "
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1697
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1698
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1699
     |s index1 index2|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1700
     s := '   foo    bar      baz'.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1701
     index1 := s indexOfNonSeparatorStartingAt:1.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1702
     index2 := s indexOfSeparatorStartingAt:index1.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1703
     s copyFrom:index1 to:index2 - 1
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1704
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1705
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1706
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1707
indexOfSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1708
    "return the index of the first whitespace character;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1709
     starting the search at the beginning, searching forward;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1710
     return 0 if no separator was found"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1711
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1712
    ^ self indexOfSeparatorStartingAt:1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1713
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1714
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1715
     'hello world' indexOfSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1716
     'helloworld' indexOfSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1717
     'hello   ' indexOfSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1718
     '   hello' indexOfSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1719
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1720
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1721
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1722
indexOfSeparatorStartingAt:startIndex
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1723
    "return the index of the next whitespace character,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1724
     starting the search at startIndex, searching forward;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1725
     return 0 if no separator was found"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1726
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1727
    |start  "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1728
     mySize "{ Class: SmallInteger }"|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1729
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1730
    start := startIndex.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1731
    mySize := self size.
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
    start to:mySize do:[:index |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1734
	(self at:index) isSeparator ifTrue:[^ index]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1735
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1736
    ^ 0
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
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1739
     'hello world' indexOfSeparatorStartingAt:3
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1740
     ' hello world' indexOfSeparatorStartingAt:3
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1741
     'hello world ' indexOfSeparatorStartingAt:3
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1742
     'hello world ' indexOfSeparatorStartingAt:6
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1743
     'hello world ' indexOfSeparatorStartingAt:7
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1744
     'helloworld ' indexOfSeparatorStartingAt:7
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1745
     'helloworld' indexOfSeparatorStartingAt:7
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1746
    "
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1747
!
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1748
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1749
lastIndexOfSeparator
17944
084a2c804b87 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17940
diff changeset
  1750
    "return the last index of a whitespace character (space or tab).
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1751
     (i.e. start the search at the end and search backwards);
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1752
     Returns 0 if no separator is found."
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1753
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1754
    ^ self lastIndexOfSeparatorStartingAt:(self size)
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1755
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1756
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1757
     'hello world' lastIndexOfSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1758
     'helloworld' lastIndexOfSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1759
     'hel lo wor ld' lastIndexOfSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1760
     'hel   ' lastIndexOfSeparator 6
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1761
    "
17944
084a2c804b87 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17940
diff changeset
  1762
084a2c804b87 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17940
diff changeset
  1763
    "Modified (comment): / 01-06-2012 / 13:10:30 / cg"
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1764
!
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1765
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1766
lastIndexOfSeparatorStartingAt:startIndex
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1767
    "return the index of the previous whitespace character,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1768
     starting the search at startIndex (and searching backwards);
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1769
     returns 0 if no separator was found"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1770
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1771
    |start  "{ Class: SmallInteger }"|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1772
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1773
    start := startIndex.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1774
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1775
    start to:1 by:-1 do:[:index |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1776
	(self at:index) isSeparator ifTrue:[^ index]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1777
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1778
    ^ 0
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1779
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1780
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1781
     'hello world' lastIndexOfSeparatorStartingAt:3
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1782
     'hello world' lastIndexOfSeparatorStartingAt:7
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1783
     'helloworld' lastIndexOfSeparatorStartingAt:7
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1784
     ' helloworld' lastIndexOfSeparatorStartingAt:7
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1785
    "
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1786
! !
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1787
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1788
!CharacterArray methodsFor:'comparing'!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1789
6742
292775fda600 avoid endless recursion when comparing int < string
Claus Gittinger <cg@exept.de>
parents: 6655
diff changeset
  1790
< aString
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1791
    "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
  1792
     receiver is greater than the argument. Otherwise return false.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1793
     This comparison is based on the elements ascii code -
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1794
     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
  1795
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1796
    |mySize    "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1797
     otherSize "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1798
     n         "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1799
     c1 c2|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1800
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1801
    mySize := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1802
    otherSize := aString string size.
6742
292775fda600 avoid endless recursion when comparing int < string
Claus Gittinger <cg@exept.de>
parents: 6655
diff changeset
  1803
    n := mySize min:otherSize.
292775fda600 avoid endless recursion when comparing int < string
Claus Gittinger <cg@exept.de>
parents: 6655
diff changeset
  1804
292775fda600 avoid endless recursion when comparing int < string
Claus Gittinger <cg@exept.de>
parents: 6655
diff changeset
  1805
    1 to:n do:[:index |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1806
	c1 := self at:index.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1807
	c2 := aString at:index.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1808
	(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
  1809
    ].
292775fda600 avoid endless recursion when comparing int < string
Claus Gittinger <cg@exept.de>
parents: 6655
diff changeset
  1810
    ^ mySize < otherSize
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1811
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1812
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1813
= aString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1814
    "Compare the receiver with the argument and return true if the
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1815
     receiver is equal to the argument. Otherwise return false.
1252
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  1816
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  1817
     This compare does NOT ignore case differences,
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1818
     therefore 'foo' = 'Foo' will return false.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1819
     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
  1820
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1821
    |mySize    "{ Class: SmallInteger }"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1822
     otherSize |
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1823
5963
23462e06dcff compare with Texts fixed (should compare equal if strings are)
Claus Gittinger <cg@exept.de>
parents: 5946
diff changeset
  1824
    (aString isString or:[aString species == self species]) ifFalse:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1825
	^ false
5963
23462e06dcff compare with Texts fixed (should compare equal if strings are)
Claus Gittinger <cg@exept.de>
parents: 5946
diff changeset
  1826
    ].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1827
    mySize := self size.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1828
    otherSize := aString size.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1829
    mySize == otherSize ifFalse:[^ false].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1830
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1831
    1 to:mySize do:[:index |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1832
	(self at:index) = (aString at:index) ifFalse:[^ false].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1833
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1834
    ^ true
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1835
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1836
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1837
     'foo' = 'Foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1838
     'foo' = 'bar'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1839
     'foo' = 'foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1840
     'foo' = 'foo' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1841
     'foo' asText = 'foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1842
     'foo' asText = 'foo' asText
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1843
    "
1252
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  1844
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  1845
    "Modified: 22.4.1996 / 15:53:58 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1846
!
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1847
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  1848
> aString
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1849
    "Compare the receiver with the argument and return true if the
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1850
     receiver is greater than the argument. Otherwise return false.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1851
     This comparison is based on the elements ascii code -
1252
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  1852
     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
  1853
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1854
    |mySize    "{ Class: SmallInteger }"
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1855
     otherSize "{ Class: SmallInteger }"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1856
     n         "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1857
     c1 c2|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1858
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1859
    mySize := self size.
5929
a3d2e7aaa3a3 added #compareCaselessWith:
Claus Gittinger <cg@exept.de>
parents: 5898
diff changeset
  1860
    otherSize := aString string size.
a3d2e7aaa3a3 added #compareCaselessWith:
Claus Gittinger <cg@exept.de>
parents: 5898
diff changeset
  1861
    n := mySize min:otherSize.
a3d2e7aaa3a3 added #compareCaselessWith:
Claus Gittinger <cg@exept.de>
parents: 5898
diff changeset
  1862
a3d2e7aaa3a3 added #compareCaselessWith:
Claus Gittinger <cg@exept.de>
parents: 5898
diff changeset
  1863
    1 to:n do:[:index |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1864
	c1 := self at:index.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1865
	c2 := aString at:index.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1866
	(c1 == c2 or:[c1 = c2]) ifFalse:[^ c1 > c2].
5929
a3d2e7aaa3a3 added #compareCaselessWith:
Claus Gittinger <cg@exept.de>
parents: 5898
diff changeset
  1867
    ].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1868
    ^ mySize > otherSize
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1869
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1870
    "Modified: 22.4.1996 / 15:55:00 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1871
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1872
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1873
compareCaselessWith:aString
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1874
    "Compare the receiver against the argument, ignoreing case.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1875
     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
  1876
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1877
     This comparison is based on the elements ascii code -
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1878
     i.e. national characters are NOT treated specially.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1879
     'foo' compareWith: 'Foo' will return 0"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1880
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1881
    |mySize    "{ Class: SmallInteger }"
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1882
     otherSize "{ Class: SmallInteger }"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1883
     n         "{ Class: SmallInteger }"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1884
     c1 c2|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1885
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1886
    mySize := self size.
5739
4fd3be7ccc75 oops some relational ops did accept a non-string arg
Claus Gittinger <cg@exept.de>
parents: 5732
diff changeset
  1887
    otherSize := aString string size.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1888
    n := mySize min:otherSize.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1889
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1890
    1 to:n do:[:index |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1891
	c1 := (self at:index) asLowercase.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1892
	c2 := (aString at:index) asLowercase.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1893
	c1 > c2 ifTrue:[^ 1].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1894
	c1 < c2 ifTrue:[^ -1].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1895
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1896
    mySize > otherSize ifTrue:[^ 1].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1897
    mySize < otherSize ifTrue:[^ -1].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1898
    ^ 0
1252
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  1899
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  1900
    "Modified: 22.4.1996 / 15:56:07 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1901
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1902
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1903
compareWith:aString
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1904
    "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
  1905
     greater, 0 if equal and -1 if less than the argument.
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1906
     This comparison is based on the elements' codepoints -
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1907
     i.e. upper/lowercase & national characters are NOT treated specially.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1908
     'foo' compareWith: 'Foo' will return 1.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1909
     while 'foo' sameAs:'Foo' will return true"
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1910
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1911
    |mySize    "{ Class: SmallInteger }"
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1912
     otherSize "{ Class: SmallInteger }"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1913
     n         "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1914
     c1 c2|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1915
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1916
    mySize := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1917
    otherSize := aString string size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1918
    n := mySize min:otherSize.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1919
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1920
    1 to:n do:[:index |
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1921
	c1 := self at:index.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1922
	c2 := aString at:index.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1923
	c1 > c2 ifTrue:[^ 1].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1924
	c1 < c2 ifTrue:[^ -1].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1925
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1926
    mySize > otherSize ifTrue:[^ 1].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1927
    mySize < otherSize ifTrue:[^ -1].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1928
    ^ 0
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1929
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1930
    "Modified: 22.4.1996 / 15:56:07 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1931
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1932
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1933
endsWith:aStringOrCharacter
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1934
    "return true, if the receiver ends with something, aStringOrCharacter."
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1935
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1936
    |s|
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1937
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1938
    (s := self string) ~~ self ifTrue:[
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  1939
	^ s endsWith:aStringOrCharacter
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1940
    ].
17763
019bb9c842c5 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17761
diff changeset
  1941
    (self notEmpty and:[aStringOrCharacter isCharacter]) ifTrue:[
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  1942
	^ self last = aStringOrCharacter
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1943
    ].
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1944
    ^ super endsWith:aStringOrCharacter
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1945
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1946
    "
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1947
     'hello world' endsWith:'world'
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1948
     'hello world' asText allBold endsWith:'world'
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1949
    "
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1950
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1951
    "Modified: 12.5.1996 / 15:49:18 / cg"
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1952
!
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1953
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1954
hammingDistanceTo:aString
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1955
    "return the hamming distance (the number of characters which are different).
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1956
     In information theory, the Hamming distance between two strings of equal length
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1957
     is the number of positions for which the corresponding symbols are different.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1958
     Put another way, it measures the minimum number of substitutions required to change
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1959
     one into the other, or the number of errors that transformed one string into the other."
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1960
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1961
    self assert:(aString size == self size).
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1962
    ^ 1 to:self size count:[:idx | (self at:idx) ~= (aString at:idx)]
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1963
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1964
    "
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1965
     'roses' hammingDistanceTo:'toned'
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1966
    "
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1967
!
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1968
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1969
hash
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1970
    "return an integer useful as a hash-key"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1971
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  1972
    "/ immediately after any change, execute (maybe in a debugger):
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  1973
    "/      Set allSubInstancesDo:[:s | s rehash]
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  1974
    ^ self hash_dragonBook
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  1975
    "/ ^ self hash_sdbm.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  1976
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  1977
    "
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  1978
     'a' hash
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  1979
     'a' asUnicode16String hash
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  1980
     'aa' hash
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  1981
     'aa' asUnicode16String hash
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  1982
     'ab' hash
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  1983
     'ab' asUnicode16String hash
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  1984
     'ab' hash
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  1985
     'ab' asArray hash
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  1986
    "
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  1987
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  1988
    "Modified: / 26-12-2011 / 14:09:07 / cg"
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  1989
!
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  1990
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  1991
hash_dragonBook
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  1992
    "return an integer useful as a hash-key"
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  1993
10698
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  1994
    |h g|
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  1995
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  1996
    "/
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  1997
    "/ this is the dragon-book algorithm
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  1998
    "/
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  1999
    h := 0.
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2000
    self reverseDo:[:char |
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2001
"/ 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
  2002
"/        h := (h bitShift:4) + char asciiValue.
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2003
	h := (h bitShift:4).
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2004
	h:= h + char codePoint.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2005
	h := h bitAnd:16rFFFFFFFF.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2006
	g := (h bitAnd: 16rF0000000).
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2007
	g ~~ 0 ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2008
	    h := h bitXor:(g bitShift:-24).
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2009
	    h := h bitXor:g.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2010
	].
10698
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2011
    ].
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2012
    "/
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2013
    "/ multiply by large prime to spread values
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2014
    "/ This speeds up Set and Dictionary by a factor of 10!!
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2015
    "/
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2016
    h := h * 31415821.
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2017
    h := h bitAnd:16r3fffffff.
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2018
    ^ h
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2019
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2020
    "
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2021
     'a' hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2022
     'a' asUnicode16String hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2023
     'aa' hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2024
     'aa' asUnicode16String hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2025
     'ab' hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2026
     'ab' asUnicode16String hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2027
     'ab' hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2028
     'ab' asArray hash
10698
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2029
    "
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2030
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2031
    "Created: / 26-12-2011 / 13:46:06 / cg"
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2032
!
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2033
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2034
hash_sdbm
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2035
    "return an integer useful as a hash-key"
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2036
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2037
    |h|
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2038
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2039
    "/
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2040
    "/ this is the sdbm algorithm
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2041
    "/
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2042
    h := 0.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2043
    self do:[:char |
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2044
	h := (h * 65599) + char codePoint.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2045
	h := h bitAnd:16r3FFFFFFF.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2046
    ].
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2047
    ^ h
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2048
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2049
    "
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2050
     'a' hash_sdbm
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2051
     'aa' hash_sdbm
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2052
     'ab' hash_sdbm
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2053
    "
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2054
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2055
    "Created: / 26-12-2011 / 13:48:13 / cg"
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2056
!
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2057
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2058
levenshteinTo:aString
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2059
    "return the levenshtein distance to the argument, aString;
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2060
     this value corresponds to the number of replacements that have to be
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2061
     made to get aString from the receiver.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2062
     See IEEE transactions on Computers 1976 Pg 172 ff."
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2063
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2064
    "
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2065
     in the following, we assume that ommiting a character
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2066
     is less of an error than inserting an extra character.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2067
     Therefore the different insertion (i) and deletion (d) values.
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2068
	s: substitution weight
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2069
	k: keyboard weight (typing a nearby key) - or nil (then use s)
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2070
	c: case weight                           - or nil (then use s)
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2071
	e: exchange weight                       - or nil (then use s*2)
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2072
	i: insertion of extra character weight
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2073
	d: delete of a character weight
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2074
    "
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2075
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2076
    ^ StringUtilities
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2077
	    levenshteinDistanceFrom:self
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2078
	    to:aString
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2079
	    s:4 k:4 c:4 e:nil i:2 d:6
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2080
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2081
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2082
     'computer' levenshteinTo:'computer'
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2083
     'cOmputer' levenshteinTo:'computer'
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2084
     'cOmpuTer' levenshteinTo:'computer'
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2085
     'cimputer' levenshteinTo:'computer'
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2086
     'cumputer' levenshteinTo:'computer'
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2087
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2088
     'cmputer' levenshteinTo:'computer'
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2089
     'coomputer' levenshteinTo:'computer'
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2090
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2091
     'ocmprt' levenshteinTo:'computer'
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2092
     'computer' levenshteinTo:'computer'
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2093
     'ocmputer' levenshteinTo:'computer'
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2094
     'cmputer' levenshteinTo:'computer'
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2095
     'computer' levenshteinTo:'cmputer'
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2096
     'Computer' levenshteinTo:'computer'
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2097
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2098
     'compiter' levenshteinTo:'computer'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2099
     'compoter' levenshteinTo:'computer'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2100
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2101
     'comptuer' levenshteinTo:'computer'
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2102
    "
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2103
!
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2104
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2105
levenshteinTo:aString s:substWeight k:kbdTypoWeight c:caseWeight i:insrtWeight d:deleteWeight
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2106
    "parametrized levenshtein.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2107
     return the levenshtein distance to the argument, aString;
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2108
     this value corrensponds to the number of replacements that have to be
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2109
     made to get aString from the receiver.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2110
     The arguments are the costs for
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2111
	s:substitution,
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2112
	k:keyboard type (substitution),
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2113
	c:case-change,
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2114
	i:insertion
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2115
	d:deletion
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2116
     of a character.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2117
     See IEEE transactions on Computers 1976 Pg 172 ff"
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2118
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2119
    ^ StringUtilities
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2120
	    levenshteinDistanceFrom:self
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2121
	    to:aString
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2122
	    s:substWeight k:kbdTypoWeight c:caseWeight e:nil i:insrtWeight d:deleteWeight
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2123
!
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2124
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2125
sameAs:aString
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2126
    "Compare the receiver with the argument like =, but ignore case differences.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2127
     Return true or false."
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2128
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2129
    |mySize "{ Class: SmallInteger }"
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2130
     otherSize c1 c2|
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2131
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2132
    self == aString ifTrue:[^ true].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2133
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2134
    mySize := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2135
    otherSize := aString string size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2136
    mySize == otherSize ifFalse:[^ false].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2137
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2138
    1 to:mySize do:[:index |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2139
	c1 := self at:index.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2140
	c2 := aString at:index.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2141
	c1 == c2 ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2142
	    (c1 sameAs:c2) ifFalse:[^ false].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2143
	]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2144
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2145
    ^ true
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2146
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2147
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2148
     'foo' sameAs: 'Foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2149
     'foo' sameAs: 'bar'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2150
     'foo' sameAs: 'foo'
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2151
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2152
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2153
    "Modified: 22.4.1996 / 15:56:17 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2154
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2155
5242
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2156
sameAs:aString ignoreCase:ignoreCase
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2157
    "Compare the receiver with the argument.
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2158
     If ignoreCase is true, this is the same as #sameAs:,
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2159
     if false, this is the same as #=."
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2160
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2161
    ignoreCase ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2162
	^ self sameAs:aString
5242
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2163
    ].
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2164
    ^ self = aString
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2165
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2166
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2167
     'foo' sameAs:'Foo' ignoreCase:false
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2168
     'foo' sameAs:'foo' ignoreCase:true
5242
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2169
    "
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2170
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2171
!
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2172
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2173
sameCharacters:aString
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2174
    "count & return the number of characters which are the same
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2175
     (ignoring case and emphasis) in the receiver and the argument, aString."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2176
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2177
    |n "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2178
     c1 c2 cnt|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2179
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2180
    n := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2181
    n := n min:(aString string size).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2182
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2183
    cnt := 0.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2184
    1 to:n do:[:index |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2185
	c1 := self at:index.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2186
	c2 := aString at:index.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2187
	((c1 == c2)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2188
	or:[c1 asLowercase = c2 asLowercase]) ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2189
	    cnt := cnt + 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2190
	]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2191
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2192
    ^ cnt
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2193
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2194
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2195
     'foobarbaz' sameCharacters: 'foo'
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2196
     'foobarbaz' sameCharacters: 'Foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2197
     'foobarbaz' sameCharacters: 'baz'
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2198
    "
5510
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2199
!
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2200
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2201
sameEmphasisAs:aStringOrText
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2202
    "compare the receivers and the arguments emphasis"
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2203
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2204
    ^ self emphasis = aStringOrText emphasis
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2205
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2206
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2207
     'hello' asText sameEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2208
     'hello' asText sameEmphasisAs: 'hello' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2209
     'hello' asText allBold sameEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2210
     'hello' asText allBold sameEmphasisAs: 'fooba' asText allBold
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2211
     'hello' asText allBold sameEmphasisAs: 'fooba' asText allItalic
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2212
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2213
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2214
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
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  2217
sameStringAndEmphasisAs:aStringOrText
5739
4fd3be7ccc75 oops some relational ops did accept a non-string arg
Claus Gittinger <cg@exept.de>
parents: 5732
diff changeset
  2218
    "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
  2219
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2220
    aStringOrText isString ifFalse:[^ false].
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2221
    (self string = aStringOrText string) ifFalse:[^ false].
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2222
    self hasChangeOfEmphasis = aStringOrText hasChangeOfEmphasis ifFalse:[^ false].
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2223
    ^ self emphasis = aStringOrText emphasis
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2224
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2225
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2226
     'hello' asText sameEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2227
     'hello' asText sameEmphasisAs: 'hello' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2228
     'hello' asText allBold sameEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2229
     'hello' asText allBold sameEmphasisAs: 'fooba' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2230
     'hello' asText allBold sameEmphasisAs: 'fooba' asText allItalic
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2231
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2232
     'hello' sameEmphasisAs: 'hello' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2233
     'hello' sameEmphasisAs: 'hello' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2234
     'hello' sameEmphasisAs: 'fooba'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2235
     'hello' sameEmphasisAs: 'fooba' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2236
     'hello' sameEmphasisAs: 'fooba' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2237
     'hello' sameEmphasisAs: 'fooba' asText allItalic
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2238
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2239
     'hello' asText sameStringAndEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2240
     'hello' asText sameStringAndEmphasisAs: 'hello' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2241
     'hello' asText allBold sameStringAndEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2242
     'hello' asText allBold sameStringAndEmphasisAs: 'fooba' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2243
     'hello' asText allBold sameStringAndEmphasisAs: 'fooba' asText allItalic
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2244
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2245
     'hello' sameStringAndEmphasisAs: 'hello' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2246
     'hello' sameStringAndEmphasisAs: 'hello' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2247
     'hello' sameStringAndEmphasisAs: 'fooba'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2248
     'hello' sameStringAndEmphasisAs: 'fooba' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2249
     'hello' sameStringAndEmphasisAs: 'fooba' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2250
     'hello' sameStringAndEmphasisAs: 'fooba' asText allItalic
5510
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2251
    "
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2252
!
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2253
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2254
spellAgainst: aString
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2255
    "return an integer between 0 and 100 indicating how similar
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2256
     the argument is to the receiver.  No case conversion is done.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2257
     This algorithm is much simpler (but also less exact) than the
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2258
     levenshtein distance. Experiment which is better for your
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2259
     application."
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2260
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2261
    | i1     "{ Class: SmallInteger }"
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2262
      i2     "{ Class: SmallInteger }"
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2263
      next1  "{ Class: SmallInteger }"
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2264
      next2  "{ Class: SmallInteger }"
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2265
      size1  "{ Class: SmallInteger }"
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2266
      size2  "{ Class: SmallInteger }"
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2267
      score  "{ Class: SmallInteger }"
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2268
      maxLen "{ Class: SmallInteger }" |
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2269
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2270
    size1 := self size.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2271
    size2 := aString size.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2272
    maxLen := size1 max:size2.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2273
    score := 0.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2274
    i1 := i2 := 1.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2275
    [i1 <= size1 and: [i2 <= size2]] whileTrue:[
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2276
	next1 := i1 + 1.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2277
	next2 := i2 + 1.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2278
	(self at:i1) == (aString at:i2) ifTrue: [
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2279
	    score := score+1.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2280
	    i1 := next1.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2281
	    i2 := next2
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2282
	] ifFalse: [
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2283
	    (i2 < size2 and: [(self at:i1) == (aString at:next2)]) ifTrue: [
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2284
		i2 := next2
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2285
	    ] ifFalse: [
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2286
		(i1 < size1 and: [(self at:next1) == (aString at:i2)]) ifTrue: [
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2287
		    i1 := next1
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2288
		] ifFalse: [
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2289
		    i1 := next1.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2290
		    i2 := next2
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2291
		]
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2292
	    ]
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2293
	]
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2294
    ].
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2295
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2296
    score == maxLen ifTrue: [^ 100].
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2297
    ^ 100 * score // maxLen
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2298
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2299
    "
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2300
     'Smalltalk' spellAgainst: 'Smalltlak'
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2301
     'Smalltalk' spellAgainst: 'smalltlak'
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2302
     'Smalltalk' spellAgainst: 'smalltalk'
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2303
     'Smalltalk' spellAgainst: 'smalltlk'
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2304
     'Smalltalk' spellAgainst: 'Smalltolk'
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2305
    "
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2306
!
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2307
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2308
startsWith:aString
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2309
    "return true, if the receiver starts with something, aString.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2310
     If the argument is empty, true is returned."
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2311
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2312
    |s|
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2313
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2314
    (s := self string) ~~ self ifTrue:[
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2315
	^ s startsWith:aString
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2316
    ].
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2317
    ^ super startsWith:aString
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2318
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2319
    "
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2320
     'hello world' startsWith:'hello'
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2321
     'hello world' asText allBold startsWith:'hello'
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2322
     'hello world' asText allBold startsWith:''
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2323
    "
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2324
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2325
    "Created: 12.5.1996 / 15:46:40 / cg"
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2326
    "Modified: 12.5.1996 / 15:49:24 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2327
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2328
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2329
!CharacterArray methodsFor:'converting'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2330
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2331
asArrayOfSubstrings
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2332
    "return an array of substrings from the receiver, interpreting
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2333
     separators (i.e. spaces & newlines) as word-delimiters.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2334
     This is a compatibility method - the actual work is done in
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2335
     asCollectionOfWords."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2336
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2337
    ^ self asCollectionOfWords asArray
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2338
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2339
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2340
     '1 one two three four 5 five' asArrayOfSubstrings
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2341
     '1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2342
one
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2343
	two three four 5 five' asArrayOfSubstrings
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2344
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2345
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2346
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2347
asAsciiZ
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2348
    "if the receiver does not end with a 0-valued character, return a copy of it,
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2349
     with an additional 0-character. Otherwise return the receiver. This is sometimes
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2350
     needed when a string has to be passed to C, which needs 0-terminated strings.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2351
     Notice, that all singleByte strings are already 0-terminated in ST/X, whereas wide
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2352
     strings are not."
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2353
17747
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  2354
    (self notEmpty and:[self last codePoint == 0]) ifTrue:[^ self ].
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2355
    ^ self copyWith:(Character value:0).
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2356
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2357
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2358
     'abc' asAsciiZ
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2359
     'abc' asWideString asAsciiZ
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2360
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2361
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2362
17847
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  2363
asByteArray
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  2364
    |bytes sz bytesPerCharacter idx|
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  2365
17851
09d75924b034 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
  2366
    self string ~~ self ifTrue:[
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2367
	"/ for text and other wrappers
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2368
	^ self string asByteArray
17851
09d75924b034 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
  2369
    ].
09d75924b034 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
  2370
09d75924b034 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
  2371
    "/ for real strings, a fallback
17847
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  2372
    sz := self size.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  2373
    bytesPerCharacter := self bitsPerCharacter // 8.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  2374
    bytes := ByteArray new:(sz * bytesPerCharacter).
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  2375
    idx := 1.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  2376
    self do:[:char |
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2377
	|code|
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2378
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2379
	code := char codePoint.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2380
	bytesPerCharacter == 2 ifTrue:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2381
	    bytes unsignedShortAt:idx put:code
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2382
	] ifFalse:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2383
	    bytesPerCharacter == 4 ifTrue:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2384
		bytes unsignedLongAt:idx put:code
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2385
	    ] ifFalse:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2386
		bytes at:idx put:code
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2387
	    ].
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2388
	].
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2389
	idx := idx + bytesPerCharacter.
17847
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  2390
    ].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  2391
    ^ bytes
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  2392
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  2393
    "Created: / 27-07-2011 / 00:56:17 / cg"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  2394
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  2395
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2396
asCollectionOfLines
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2397
    "return a collection containing the lines (separated by cr)
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2398
     of the receiver. If multiple cr's occur in a row, the result will
17993
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2399
     contain empty strings. 
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2400
     If the string ends with a cr, an empty line will be found as last element of the resulting collection.
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2401
     See also #asCollectionOfLinesWithReturn
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2402
     (would have rather changed this method instead of adding another one, but a lot of code already uses
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2403
      this method and we did not want to risk any incompatibilities)"
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2404
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2405
    ^ self asCollectionOfSubstringsSeparatedBy:Character cr.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2406
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2407
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2408
     '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
  2409
     '1 one\\\\2 two\3 three' withCRs asCollectionOfLines
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2410
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2411
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2412
17993
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2413
asCollectionOfLinesWithReturn
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2414
    "return a collection containing the lines (separated by cr)
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2415
     of the receiver. If multiple cr's occur in a row, the result will
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2416
     contain empty strings."
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2417
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2418
    |lines|
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2419
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2420
    lines := self asCollectionOfSubstringsSeparatedBy:Character cr.
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2421
    lines last isEmpty ifTrue:[
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2422
        ^ lines copyWithoutLast:1
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2423
    ].
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2424
    ^ lines
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2425
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2426
    "
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2427
     '1\2\3' withCRs asCollectionOfLines
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2428
     '1\2\3\' withCRs asCollectionOfLines
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2429
     '1\2\3' withCRs asCollectionOfLinesWithReturn
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2430
     '1\2\3\' withCRs asCollectionOfLinesWithReturn
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2431
    "
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2432
!
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2433
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2434
asCollectionOfSubstringsSeparatedBy:aCharacter
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2435
    "return a collection containing the lines (separated by aCharacter)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2436
     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
  2437
     the result will contain empty strings."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2438
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2439
    ^ self asCollectionOfSubCollectionsSeparatedBy:aCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2440
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2441
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2442
     '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
  2443
     '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
  2444
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2445
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2446
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2447
asCollectionOfSubstringsSeparatedBy:aCharacter exceptIn:ch
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2448
    "return a collection containing the lines (separated by aCharacter)
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2449
     of the receiver. If aCharacter occurs multiple times in a row,
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2450
     the result will contain empty strings. The separation is not done,
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2451
     inside a matching pair of ch-substrings. Can be used to tokenize csv-like strings."
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2452
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2453
    |lines myClass except i c
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2454
     startIndex    "{ Class:SmallInteger }"
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2455
     stopIndex     "{ Class:SmallInteger }" |
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2456
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2457
    lines := StringCollection new.
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2458
    myClass := self species.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2459
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2460
    startIndex := 1.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2461
    except := false.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2462
    [
17993
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2463
        i := startIndex-1.
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2464
        [
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2465
            i := i+1.
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2466
            c := self at:i.
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2467
            c = ch ifTrue:[ except := except not. ].
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2468
            i < self size and:[except or:[c ~= aCharacter]]
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2469
        ] whileTrue.
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2470
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2471
        c = aCharacter ifTrue:[
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2472
            stopIndex := i -1.
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2473
        ] ifFalse: [
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2474
            stopIndex := i.
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2475
        ].
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2476
        (stopIndex < startIndex) ifTrue: [
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2477
            lines add:(myClass new:0)
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2478
        ] ifFalse: [
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2479
            lines add:(self copyFrom:startIndex to:stopIndex)
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2480
        ].
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2481
        startIndex := stopIndex + 2.
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  2482
        startIndex <= self size
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2483
    ] whileTrue.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2484
    ^ lines
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2485
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2486
    "
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2487
     'asd''f;d''dd;s' asCollectionOfSubstringsSeparatedBy:$; exceptIn:$'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2488
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2489
    "/ 'asd "hello bla" foo "bla bla" bar' asCollectionOfSubstringsSeparatedBy:$  exceptIn:$"
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2490
!
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2491
17841
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2492
asCollectionOfSubstringsSeparatedBy:aFieldSeparatorString textSeparator:aTextSeparatorOrNil
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2493
    "return a collection containing the words (separated by aFieldSeparatorString) of the receiver.
17834
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2494
     Individual words might be enclosed in aTextSeparator characters, in case they contain blanks or fieldSeparators.
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2495
     Typically used for CSV line parsing, with a $; as aFieldSeparator and $'' (dquote) as textSeparator."
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2496
17841
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2497
    |aTextSeparatorChar items scanningWord inStream element lastIsFieldSeparator sz|
17834
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2498
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2499
    aTextSeparatorOrNil isNil ifTrue:[
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2500
	^ self asCollectionOfSubstringsSeparatedByAll: aFieldSeparatorString
17834
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2501
    ].
17841
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2502
    sz := aTextSeparatorOrNil size.
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2503
    sz = 0 ifTrue:[
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2504
	aTextSeparatorChar := aTextSeparatorOrNil
17841
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2505
    ] ifFalse:[sz = 1  ifTrue:[
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2506
	"this is a String. Fetch the first character - compatibility to older expecco libs"
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2507
	aTextSeparatorChar := aTextSeparatorOrNil first.
17841
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2508
    ] ifFalse:[
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2509
	self error:'textSeparatoSize > 1'.
17841
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2510
    ]].
17834
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2511
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2512
    items := OrderedCollection new.
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2513
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2514
    inStream := ReadStream on:self.
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2515
    [
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2516
	inStream skipSeparators.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2517
	inStream atEnd
17834
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2518
    ] whileFalse:[
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2519
	lastIsFieldSeparator := false.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2520
	inStream peek == aTextSeparatorChar ifTrue:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2521
	    inStream next.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2522
	    element := ''.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2523
	    scanningWord := true.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2524
	    [ inStream atEnd not and:[scanningWord] ] whileTrue:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2525
		element := element , (inStream upTo:aTextSeparatorChar).
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2526
		(inStream peek == aTextSeparatorChar) ifTrue:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2527
		    element := element , aTextSeparatorChar .
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2528
		    inStream next.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2529
		] ifFalse:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2530
		    scanningWord := false.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2531
		].
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2532
	    ].
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2533
	    inStream upToAll:aFieldSeparatorString.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2534
	] ifFalse:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2535
	    element := inStream upToAll:aFieldSeparatorString
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2536
	].
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2537
	items add:element.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2538
	lastIsFieldSeparator := (inStream skipThroughAll:aFieldSeparatorString) notNil.
17841
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2539
    ].
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2540
    lastIsFieldSeparator ifTrue:[
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2541
	"empty element at the end of the line"
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2542
	items add:''.
17834
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2543
    ].
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2544
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2545
    ^ items
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2546
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2547
    "
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2548
     self assert:(('#First#, #Second,SecondAdd#, #Third#' asCollectionOfSubstringsSeparatedBy:',' textSeparator: $#)
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2549
		  sameContentsAs:#('First' 'Second,SecondAdd' 'Third')).
17834
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2550
     self assert:(('#Fir##st#, #Second,SecondAdd#, #Third#' asCollectionOfSubstringsSeparatedBy:',' textSeparator: $#)
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2551
		  sameContentsAs:#('Fir#st' 'Second,SecondAdd' 'Third')).
17834
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2552
     self assert:(('#Fir##st#, Second,SecondAdd, #Third#' asCollectionOfSubstringsSeparatedBy:',' textSeparator: $#)
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2553
		  sameContentsAs:#('Fir#st' 'Second' 'SecondAdd' 'Third')).
17841
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2554
     self assert:(('First,Second,Third,,' asCollectionOfSubstringsSeparatedBy:',' textSeparator:nil)
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2555
		   sameContentsAs:#('First' 'Second' 'Third' '' '')).
17841
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2556
     self assert:(('First,Second,Third,,' asCollectionOfSubstringsSeparatedBy:',' textSeparator:'#')
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  2557
		   sameContentsAs:#('First' 'Second' 'Third' '' '')).
17834
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2558
    "
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2559
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2560
    "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
  2561
!
999589445aa7 add new method for splitting a csv string into csv elements
ab
parents: 10437
diff changeset
  2562
7339
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2563
asCollectionOfSubstringsSeparatedByAll:aSeparatorString
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2564
    "return a collection containing the lines (separated by aSeparatorString)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2565
     of the receiver. If aSeparatorString occurs multiple times in a row,
7339
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2566
     the result will contain empty strings."
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2567
8852
9f5984eff2c2 use asCollectionOfSubCollectionsSeparatedBy*
Claus Gittinger <cg@exept.de>
parents: 8794
diff changeset
  2568
    ^ self asCollectionOfSubCollectionsSeparatedByAll:aSeparatorString
9f5984eff2c2 use asCollectionOfSubCollectionsSeparatedBy*
Claus Gittinger <cg@exept.de>
parents: 8794
diff changeset
  2569
9f5984eff2c2 use asCollectionOfSubCollectionsSeparatedBy*
Claus Gittinger <cg@exept.de>
parents: 8794
diff changeset
  2570
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2571
     '1::2::3::4::5::' asCollectionOfSubstringsSeparatedByAll:'::'
7339
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2572
    "
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2573
!
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2574
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2575
asCollectionOfSubstringsSeparatedByAny:aCollectionOfSeparators
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2576
    "return a collection containing the words (separated by any character
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2577
     from aCollectionOfSeparators) of the receiver.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2578
     This allows breaking up strings using any character as separator."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2579
8852
9f5984eff2c2 use asCollectionOfSubCollectionsSeparatedBy*
Claus Gittinger <cg@exept.de>
parents: 8794
diff changeset
  2580
    ^ self asCollectionOfSubCollectionsSeparatedByAny:aCollectionOfSeparators
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2581
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2582
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2583
     'hello:world:isnt:this nice' asCollectionOfSubstringsSeparatedByAny:#($:)
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2584
     'hello:world:isnt:this nice' asCollectionOfSubstringsSeparatedByAny:':'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2585
     'hello:world:isnt:this nice' asCollectionOfSubstringsSeparatedByAny:(Array with:$: with:Character space)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2586
     'hello:world:isnt:this nice' asCollectionOfSubstringsSeparatedByAny:': '
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2587
     'h1e2l3l4o' asCollectionOfSubstringsSeparatedByAny:($1 to: $9)
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2588
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2589
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2590
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2591
asCollectionOfWords
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2592
    "return a collection containing the words (separated by whitespace)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2593
     of the receiver. Multiple occurrences of whitespace characters will
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2594
     be treated like one - i.e. whitespace is skipped."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2595
7797
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2596
    |words|
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2597
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2598
    words := StringCollection new.
7797
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2599
    self asCollectionOfWordsDo:[:w | words add:w].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2600
    ^ words
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2601
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2602
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2603
     'hello world isnt this nice' asCollectionOfWords
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2604
     '    hello    world   isnt   this   nice  ' asCollectionOfWords
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2605
     'hello' asCollectionOfWords
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2606
     '' asCollectionOfWords
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2607
     '      ' asCollectionOfWords
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2608
     ' foo bar__baz__bla__ bar ' asCollectionOfWords
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2609
     ' foo __bar__baz__bla__ bar ' asCollectionOfWords
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2610
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2611
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2612
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2613
asCollectionOfWordsDo:aBlock
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2614
    "evaluate aBlock for each word (separated by whitespace) of the receiver.
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2615
     Multiple occurrences of whitespace characters will be treated like one
7797
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2616
     - i.e. whitespace is skipped.
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2617
     Returns the number of words (i.e. the number of invocations of aBlock)."
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2618
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2619
    |count  "{ Class:SmallInteger }"
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2620
     start  "{ Class:SmallInteger }"
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2621
     stop   "{ Class:SmallInteger }"
7797
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2622
     mySize "{ Class:SmallInteger }"|
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2623
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2624
    count := 0.
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2625
    start := 1.
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2626
    mySize := self size.
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2627
    [start <= mySize] whileTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2628
	start := self indexOfNonSeparatorStartingAt:start.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2629
	start == 0 ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2630
	    ^ count
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2631
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2632
	stop := self indexOfSeparatorStartingAt:start.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2633
	stop == 0 ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2634
	    aBlock value:(self copyFrom:start to:mySize).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2635
	    ^ count + 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2636
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2637
	aBlock value:(self copyFrom:start to:(stop - 1)).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2638
	start := stop.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2639
	count := count + 1
7797
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2640
    ].
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2641
    ^ count
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2642
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2643
    "
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2644
     'hello world isnt this nice' asCollectionOfWordsDo:[:w | Transcript showCR:w]
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2645
     '    hello    world   isnt   this   nice  ' asCollectionOfWordsDo:[:w | Transcript showCR:w]
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2646
     'hello' asCollectionOfWordsDo:[:w | Transcript showCR:w]
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2647
     '' asCollectionOfWordsDo:[:w | Transcript showCR:w]
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2648
     '      ' asCollectionOfWordsDo:[:w | Transcript showCR:w]
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2649
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2650
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2651
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2652
asComposedText
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2653
    "ST-80 compatibility
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2654
     - ST/X does not (as today) support composedTexts."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2655
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2656
    ^ ComposedText fromString:self string
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2657
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2658
    "Modified: 27.4.1996 / 13:30:30 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2659
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2660
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2661
asFilename
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2662
    "return a Filename with pathname taken from the receiver"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2663
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2664
    ^ Filename named:self "(self asSingleByteStringReplaceInvalidWith:$?)"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2665
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2666
    "Modified: 20.5.1996 / 09:38:15 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2667
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2668
3060
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2669
asFixedPoint
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2670
    "read a fixedPoint number from the receiver.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2671
     Notice, that errors may occur during the read,
7423
5b25b8e82453 comments
Claus Gittinger <cg@exept.de>
parents: 7422
diff changeset
  2672
     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
  2673
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2674
    ^ FixedPoint readFromString:self
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2675
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2676
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2677
     '0.123' asFixedPoint
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2678
     '12345' asFixedPoint
3060
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2679
     '(1/5)' asFixedPoint
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2680
     'foo' asFixedPoint
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2681
     Object errorSignal handle:[:ex | ex return:0] do:['foo' asFixedPoint]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2682
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2683
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2684
    "Modified: / 25.10.1997 / 15:19:00 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2685
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2686
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2687
asFixedPoint:scale
3060
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2688
    "read a fixedPoint number with scale number of post-decimal digits
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2689
     from the receiver. Scale controls the number of displayed digits,
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2690
     not the number of actually valid digits.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2691
     Notice, that errors may occur during the read,
7423
5b25b8e82453 comments
Claus Gittinger <cg@exept.de>
parents: 7422
diff changeset
  2692
     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
  2693
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2694
    ^ (FixedPoint readFromString:self) scale:scale
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2695
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2696
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2697
     '0.123' asFixedPoint:2
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2698
     '123456' asFixedPoint:2
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2699
     ('3.14157' asFixedPoint:1) asFixedPoint:5
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2700
     '3.14157' asFixedPoint:2
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2701
     'foo' asFixedPoint:2
3060
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2702
    "
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2703
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2704
    "Modified: / 25.10.1997 / 15:21:57 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2705
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2706
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2707
asFloat
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2708
    "read a float number from the receiver.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2709
     Notice, that errors may occur during the read,
7422
200486204923 comments
Claus Gittinger <cg@exept.de>
parents: 7421
diff changeset
  2710
     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
  2711
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2712
    ^ (Number readFromString:self) asFloat
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2713
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2714
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2715
     '0.123' asFloat
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2716
     '12345' asFloat
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2717
     '(1/5)' asFloat
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2718
     Object errorSignal handle:[:ex | ex return:0] do:['foo' asFloat]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2719
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2720
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2721
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2722
asInteger
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2723
    "convert the receiver into an integer.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2724
     Notice, that errors may occur during the read,
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2725
     so you better setup some exception handler when using this method.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2726
     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
  2727
     in other smalltalks.
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2728
     For less strict integer reading, use Integer readFrom:aString"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2729
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2730
    ^ Integer readFromString:self
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2731
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2732
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2733
     '12345678901234567890' asInteger
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2734
     '-1234' asInteger
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2735
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2736
     The following raises an error:
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2737
	 '0.123' asInteger              <- reader finds more after reading 0
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2738
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2739
     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
  2740
	 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
  2741
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2742
     '0.123' asInteger
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2743
     '0.123' asNumber    <- returns what you expect
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2744
     Object errorSignal handle:[:ex | ex return:0] do:['foo' asInteger]
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2745
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2746
    "
9192
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
asLowercase
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2750
    "return a copy of myself in lowercase letters"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2751
8003
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  2752
    |newStr c bitsPerCharacter
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2753
     mySize "{ Class: SmallInteger }" |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2754
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2755
    mySize := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2756
    mySize == 0 ifTrue:[^ self].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2757
    newStr := self species new:mySize.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2758
    bitsPerCharacter := newStr bitsPerCharacter.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2759
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2760
    1 to:mySize do:[:i |
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2761
	c := (self at:i) asLowercase.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2762
	c bitsPerCharacter > bitsPerCharacter ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2763
	    newStr := c stringSpecies fromString:newStr.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2764
	].
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2765
	newStr at:i put:c
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2766
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2767
    ^ newStr
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2768
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2769
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2770
     'HelloWorld' asLowercase
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2771
     'HelloWorld' asLowercaseFirst
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2772
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2773
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2774
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2775
asLowercaseFirst
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2776
    "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
  2777
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2778
    |newString firstChar firstCharAsLowercase|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2779
11525
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
  2780
    self isEmpty ifTrue:[^ self].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2781
    firstChar := (self at:1).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2782
    firstCharAsLowercase := firstChar asLowercase.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2783
    firstChar == firstCharAsLowercase ifTrue:[ ^ self].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2784
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2785
    firstCharAsLowercase bitsPerCharacter > self bitsPerCharacter ifTrue:[
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2786
	newString := firstCharAsLowercase stringSpecies fromString:self.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2787
    ] ifFalse:[
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2788
	newString := self stringSpecies fromString:self.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2789
    ].
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2790
    newString at:1 put:firstCharAsLowercase.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2791
    ^ newString
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2792
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2793
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2794
     'HelloWorld' asLowercase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2795
     'HelloWorld' asLowercaseFirst
608
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
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2799
asLowercaseLast
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2800
    "return a copy of myself where the last character is
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2801
     converted to lowercase."
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2802
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2803
    |newString sz|
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2804
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2805
    sz := self size.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2806
    newString := self copyFrom:1 to:sz.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2807
    sz > 0 ifTrue:[
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2808
	newString at:sz put:(newString at:sz) asLowercase
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2809
    ].
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2810
    ^ newString
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2811
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2812
    "
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2813
     'HelloWorld' asLowercase
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2814
     'HelloWorlD' asLowercaseLast
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2815
    "
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2816
!
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2817
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2818
asNumber
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2819
    "read a number from the receiver.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2820
     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
  2821
     so you better setup some signal handler when using this method.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2822
     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
  2823
     it does not handle smalltalk numbers (i.e. radix).
c6396149df08 comment
Claus Gittinger <cg@exept.de>
parents: 9087
diff changeset
  2824
     To read a smalltalk number, use Number >> readSmalltalkFrom:.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2825
     This may change if ANSI specifies it."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2826
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2827
"/ ST-80 behavior:
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2828
"/  ^ Number readFromString:self onError:0
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2829
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2830
    ^ Number readFromString:self
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2831
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2832
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2833
     '123'     asNumber
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2834
     '123.567' asNumber
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2835
     '(5/6)'   asNumber
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2836
     'foo'     asNumber
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2837
     Object errorSignal handle:[:ex | ex returnWith:0] do:['foo' asNumber]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2838
    "
9192
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
asNumberFromFormatString:ignored
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2842
    "read a number from the receiver, ignoring any nonDigit characters.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2843
     This is typically used to convert from strings which include
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2844
     dollar-signs or millenium digits. However, this method also ignores
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2845
     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
  2846
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2847
    |tempString|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2848
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2849
    tempString := self collect:[:char | char isDigit].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2850
    ^ Number readFromString:tempString onError:0
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2851
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2852
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2853
     'USD 123' asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2854
     'DM 123'  asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2855
     '123'     asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2856
     '123.567' asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2857
     '(5/6)'   asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2858
     'foo'     asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2859
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2860
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2861
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2862
asOneByteString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2863
    "return the receiver converted to a 'normal' string.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2864
     Same as asSingleByteString - for compatibility."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2865
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2866
    ^ self asSingleByteString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2867
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2868
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2869
asSingleByteString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2870
    "return the receiver converted to a 'normal' string.
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2871
     Raises an error if unrepresentable characters are encountered.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2872
     See also: asSingleByteStringIfPossible and asSingleByteStringReplaceInvalidWith:"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2873
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2874
    ^ String fromString:self
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2875
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2876
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2877
     (Unicode16String with:(Character value:16rFF)) asSingleByteString
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2878
     (Unicode16String with:(Character value:16rFFFF)) asSingleByteString
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2879
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2880
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2881
7977
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  2882
asSingleByteStringIfPossible
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  2883
    "if possible, return the receiver converted to a 'normal' string.
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  2884
     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
  2885
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  2886
    self bitsPerCharacter == 8 ifTrue:[^ self].
8102
e0537422e2d3 Use the ANSI-blessed #codePoint instead of deprecated #asciiValue
Stefan Vogel <sv@exept.de>
parents: 8083
diff changeset
  2887
    (self contains:[:char | char codePoint > 255]) ifFalse:[^ self asSingleByteString].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2888
    ^ self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2889
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2890
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2891
     'hello' asSingleByteStringIfPossible
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2892
     'hello' asUnicodeString asSingleByteStringIfPossible
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2893
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2894
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2895
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2896
asSingleByteStringReplaceInvalidWith:replacementCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2897
    "return the receiver converted to a 'normal' string,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2898
     with invalid characters replaced by replacementCharacter.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2899
     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
  2900
     and replace characters above code-255 with some replacement."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2901
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2902
    |newString|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2903
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2904
    newString := String new:(self size).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2905
    1 to:self size do:[:idx |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2906
	|char|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2907
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2908
	char := self at:idx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2909
	char codePoint <= 16rFF ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2910
	    newString at:idx put:char
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2911
	] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2912
	    newString at:idx put:replacementCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2913
	].
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2914
    ].
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2915
    ^ newString
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2916
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2917
    "Created: 30.6.1997 / 13:02:14 / cg"
7977
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  2918
!
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  2919
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2920
asString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2921
    "return myself - I am a string"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2922
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2923
    ^ self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2924
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2925
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2926
asStringCollection
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2927
    "return a collection of lines from myself."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2928
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2929
    ^ StringCollection fromString:self "string"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2930
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2931
    "Modified: 13.5.1996 / 20:36:59 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2932
!
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  2933
1434
a317ba02d685 allow aText asSymbol
Claus Gittinger <cg@exept.de>
parents: 1429
diff changeset
  2934
asSymbol
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  2935
    "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
  2936
     The receiver must be a singleByte-String.
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  2937
     TwoByte- and FourByteSymbols are (currently ?) not allowed."
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  2938
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  2939
    |str|
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  2940
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2941
    str := self string.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2942
    str ~~ self ifTrue:[ ^ str asSymbol ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2943
    ^ self asSingleByteString asSymbol
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2944
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2945
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2946
asSymbolIfInterned
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2947
    "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
  2948
     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
  2949
	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
  2950
     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
  2951
     The receiver must be a singleByte-String.
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  2952
     TwoByte- and FourByteSymbols are (currently ?) not allowed."
1435
3ee1fde2aa58 allow asSymbolIfInterned for Texts
Claus Gittinger <cg@exept.de>
parents: 1434
diff changeset
  2953
6642
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  2954
    |s|
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  2955
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  2956
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  2957
    s := self string.
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  2958
    s ~~ self ifTrue:[
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  2959
       ^ s asSymbolIfInterned
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  2960
    ].
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  2961
    ^ nil.
1435
3ee1fde2aa58 allow asSymbolIfInterned for Texts
Claus Gittinger <cg@exept.de>
parents: 1434
diff changeset
  2962
3ee1fde2aa58 allow asSymbolIfInterned for Texts
Claus Gittinger <cg@exept.de>
parents: 1434
diff changeset
  2963
    "Created: 22.5.1996 / 16:37:04 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2964
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2965
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2966
asText
9403
ba6ca2bcfe10 documentation
Stefan Vogel <sv@exept.de>
parents: 9391
diff changeset
  2967
    "return a Text-object (string with emphasis) from myself."
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2968
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2969
    "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
  2970
    Text isNil ifTrue:[^ self].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2971
    ^ Text fromString:self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2972
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2973
    "Created: 12.5.1996 / 10:41:14 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2974
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2975
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2976
asTitlecase
8027
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2977
    "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
  2978
     and everything else to lowercase.
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2979
     See the comment in Character on what titlecase is."
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2980
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2981
    |newStr c bitsPerCharacter
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2982
     mySize "{ Class: SmallInteger }" |
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2983
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2984
    mySize := self size.
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2985
    newStr := self species new:mySize.
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2986
    bitsPerCharacter := newStr bitsPerCharacter.
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2987
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2988
    1 to:mySize do:[:i |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2989
	i == 1 ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2990
	    c := (self at:i) asTitlecase.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2991
	] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2992
	    c := (self at:i) asLowercase.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2993
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2994
	c bitsPerCharacter > bitsPerCharacter ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2995
	    newStr := c stringSpecies fromString:newStr.
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
	newStr at:i put:c
8027
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2998
    ].
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2999
    ^ newStr
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3000
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3001
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3002
     'helloWorld' asTitlecase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3003
     'HelloWorld' asTitlecase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3004
     'HELLOWORLD' asTitlecase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3005
     'helloworld' asTitlecase
8027
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3006
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3007
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3008
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3009
asTitlecaseFirst
8023
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3010
    "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
  3011
     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
  3012
     (2-character glyphs), which consist of an upper- and lower-case characters.
93db40068fba comment
Claus Gittinger <cg@exept.de>
parents: 8023
diff changeset
  3013
     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
  3014
     receiver."
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3015
8026
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  3016
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3017
     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
  3018
     (Let us write this compound character using ASCII as 'dz'.)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3019
     This character uppercases to character U+01F1, LATIN CAPITAL LETTER DZ.
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3020
     (Which is basically 'DZ'.)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3021
     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
  3022
     (Which we can write 'Dz'.)
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  3023
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  3024
      character uppercase titlecase
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  3025
      --------- --------- ---------
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  3026
      dz        DZ        Dz
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  3027
    "
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  3028
8023
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3029
    |newString firstChar firstCharAsTitlecase|
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3030
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3031
    firstChar := (self at:1).
8025
04d9b6ef3012 comments
Claus Gittinger <cg@exept.de>
parents: 8024
diff changeset
  3032
    firstCharAsTitlecase := firstChar asTitlecase.
8023
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3033
    firstChar == firstCharAsTitlecase ifTrue:[ ^ self].
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  3034
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  3035
    firstCharAsTitlecase bitsPerCharacter > self bitsPerCharacter ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3036
	newString := firstCharAsTitlecase stringSpecies fromString:self.
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  3037
    ] ifFalse:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3038
	newString := self stringSpecies fromString:self.
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  3039
    ].
8023
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3040
    newString at:1 put:firstCharAsTitlecase.
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3041
    ^ newString
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3042
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3043
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3044
     'helloWorld' asTitlecaseFirst
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3045
     'HelloWorld' asTitlecaseFirst
8023
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3046
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3047
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3048
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3049
asTwoByteString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3050
    "return the receiver converted to a two-byte string.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3051
     Will be obsolete soon."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3052
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3053
    ^ TwoByteString fromString:self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3054
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3055
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3056
asURI
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3057
    "return an URI with string taken from the receiver"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3058
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3059
    ^ URI fromString:self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3060
!
8710
Stefan Vogel <sv@exept.de>
parents: 8646
diff changeset
  3061
5776
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  3062
asURL
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  3063
    "return an URL-object from myself."
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  3064
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  3065
    ^ URL fromString:self
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  3066
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  3067
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3068
     'http://www.exept.de:80/index.html' asURL host
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3069
     'http://www.exept.de:80/index.html' asURL port
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3070
     'http://www.exept.de:80/index.html' asURL method
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3071
     'http://www.exept.de:80/index.html' asURL path
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3072
    "
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
asUnicode16String
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3076
    "thats not really true - characters above ascii 16r7F may need special treatment"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3077
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3078
    ^ ((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
  3079
!
8295
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3080
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3081
asUnicode32String
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3082
    "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
  3083
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3084
    ^ ((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
  3085
!
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3086
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3087
asUnicodeString
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3088
    "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
  3089
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3090
    ^ ((UnicodeString new:self size) replaceFrom:1 to:self size with:self startingAt:1)
17944
084a2c804b87 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17940
diff changeset
  3091
084a2c804b87 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17940
diff changeset
  3092
    "
084a2c804b87 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17940
diff changeset
  3093
        'Hello World' asUnicodeString
084a2c804b87 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17940
diff changeset
  3094
    "
8295
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3095
!
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3096
17807
06cc6c49e291 merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17800
diff changeset
  3097
asUnixFilename
06cc6c49e291 merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17800
diff changeset
  3098
    "return a UnixFilename with pathname taken from the receiver"
06cc6c49e291 merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17800
diff changeset
  3099
06cc6c49e291 merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17800
diff changeset
  3100
    ^ UnixFilename named:self
06cc6c49e291 merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17800
diff changeset
  3101
06cc6c49e291 merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17800
diff changeset
  3102
    "Created: / 20-09-2010 / 21:42:55 / cg"
06cc6c49e291 merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17800
diff changeset
  3103
!
06cc6c49e291 merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17800
diff changeset
  3104
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3105
asUppercase
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3106
    "return a copy of myself in uppercase letters"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3107
8003
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3108
    |newStr c bitsPerCharacter
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3109
     mySize "{ Class: SmallInteger }" |
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3110
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3111
    mySize := self size.
8954
12e701d7b5ac allow for receiver to be empty in asLowercase and asUppercase.
Claus Gittinger <cg@exept.de>
parents: 8938
diff changeset
  3112
    mySize == 0 ifTrue:[^ self].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3113
    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
  3114
    bitsPerCharacter := newStr bitsPerCharacter.
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3115
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3116
    1 to:mySize do:[:i |
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3117
	c := (self at:i) asUppercase.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3118
	c bitsPerCharacter > bitsPerCharacter ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3119
	    newStr := c stringSpecies fromString:newStr.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3120
	].
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3121
	newStr at:i put:c
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3122
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3123
    ^ newStr
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3124
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3125
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3126
     'helloWorld' asUppercase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3127
     'helloWorld' asUppercaseFirst
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3128
     (Character value:16rB5) asString asUppercase   -- needs 16 bits !!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3129
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3130
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3131
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3132
asUppercaseFirst
8003
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3133
    "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
  3134
     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
  3135
     receiver."
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3136
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3137
    |newString firstChar firstCharAsUppercase|
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3138
17751
b2273fa8d59f Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17747
diff changeset
  3139
    self isEmpty ifTrue:[^ self].
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  3140
    firstChar := self at:1.
8003
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3141
    firstCharAsUppercase := firstChar asUppercase.
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3142
    firstChar == firstCharAsUppercase ifTrue:[ ^ self].
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3143
17751
b2273fa8d59f Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17747
diff changeset
  3144
    "/ 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
  3145
    firstCharAsUppercase bitsPerCharacter > self bitsPerCharacter ifTrue:[
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  3146
	newString := firstCharAsUppercase stringSpecies fromString:self.
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  3147
    ] ifFalse:[
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  3148
	newString := self stringSpecies fromString:self.
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  3149
    ].
8003
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3150
    newString at:1 put:firstCharAsUppercase.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3151
    ^ newString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3152
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3153
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3154
     'helloWorld' asUppercase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3155
     'helloWorld' asUppercaseFirst
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3156
     'HelloWorld' asUppercaseFirst
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3157
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3158
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3159
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3160
asUppercaseLast
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3161
    "return a copy of myself where the last character is
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3162
     converted to uppercase."
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3163
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3164
    |newString sz|
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3165
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3166
    sz := self size.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3167
    newString := self copyFrom:1 to:sz.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3168
    sz > 0 ifTrue:[
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3169
	newString at:sz put:(newString at:sz) asUppercase
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3170
    ].
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3171
    ^ newString
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3172
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3173
    "
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3174
     'HelloWorld' asUppercase
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3175
     'HelloWorld' asUppercaseLast
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3176
    "
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3177
!
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3178
11062
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3179
literalArrayEncoding
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3180
    "encode myself as an array literal, from which a copy of the receiver
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3181
     can be reconstructed with #decodeAsLiteralArray."
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3182
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3183
    ^ self
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3184
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3185
    "Modified: 1.9.1995 / 02:25:45 / claus"
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3186
    "Modified: 22.4.1996 / 13:00:50 / cg"
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3187
!
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3188
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3189
string
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3190
    "return the receiver - for ST-80 compatibility"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3191
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3192
    ^ self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3193
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3194
    "Modified: 27.4.1996 / 13:29:30 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3195
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3196
11320
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  3197
writeStream
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3198
    "return a stream for writing onto the receiver.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3199
     Redefined to return a CharacterWriteStream which automatically checks for the bytesPerCharacter
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3200
     and replaces the stream-buffer as required."
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3201
11320
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  3202
    ^ CharacterWriteStream on:self
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3203
! !
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
!CharacterArray methodsFor:'copying'!
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
, aStringOrCharacter
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3208
    "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
  3209
     This is nonStandard, but convenient"
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3210
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3211
    |myWidth otherWidth|
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3212
1050
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3213
    aStringOrCharacter isCharacter ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3214
	^ self copyWith:aStringOrCharacter
1050
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3215
    ].
1396
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3216
    aStringOrCharacter isText ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3217
	^ aStringOrCharacter concatenateFromString:self
1396
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3218
    ].
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3219
    aStringOrCharacter isString ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3220
	(otherWidth := aStringOrCharacter bitsPerCharacter) ~~ (myWidth := self bitsPerCharacter) ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3221
	    otherWidth > myWidth ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3222
		^ (aStringOrCharacter species fromString:self) , aStringOrCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3223
	    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3224
	    ^ self , (self species fromString:aStringOrCharacter)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3225
	].
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3226
    ].
1050
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3227
    ^ super , aStringOrCharacter
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3228
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3229
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3230
     'hello' , $1
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3231
     'hello' , '1'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3232
     'hello' , (' world' asText allBold)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3233
     'hello' , (JISEncodedString fromString:' world')
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3234
     (JISEncodedString fromString:'hello') , ' world'
1411
a3b3ab3044c6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1396
diff changeset
  3235
1422
9a0b792f2953 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1411
diff changeset
  3236
     Transcript showCR:
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3237
	 (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
  3238
    "
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3239
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3240
    "Modified: 28.6.1997 / 00:13:17 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3241
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3242
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3243
,, aString
7020
f51001115a54 comment
penk
parents: 6998
diff changeset
  3244
    "concatenate with a newLine in between"
6965
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3245
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3246
    ^ (self copyWith:Character cr) , aString
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3247
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3248
   "
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3249
     hello ,, world
7020
f51001115a54 comment
penk
parents: 6998
diff changeset
  3250
     'hello' ,, 'world'
6965
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3251
   "
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3252
!
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3253
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3254
chopTo:maxLen
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3255
    "if the receivers size is less or equal to maxLen, return it.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3256
     Otherwise, return a copy of the receiver, where some characters
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3257
     in the middle have been removed for a total string length
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3258
     of maxLen."
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3259
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3260
    |sz n1 n2|
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3261
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3262
    (sz := self size) <= maxLen ifTrue:[ ^ self ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3263
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3264
    n1 := n2 := maxLen // 2.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3265
    maxLen odd ifTrue:[
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3266
	n2 := n1 + 1
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3267
    ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3268
    ^ (self copyFrom:1 to:n1) , (self copyFrom:sz - n2 + 1)
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3269
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3270
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3271
     '12345678901234'   chopTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3272
     '123456789012345'  chopTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3273
     '1234567890123456' chopTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3274
     'aShortString' chopTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3275
     'aVeryLongNameForAStringThatShouldBeShortened' chopTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3276
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3277
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3278
    "Modified: / 24-10-2006 / 12:32:01 / cg"
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3279
!
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3280
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3281
concatenate:string1 and:string2
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3282
    "return the concatenation of myself and the arguments, string1 and string2.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3283
     This is equivalent to self , string1 , string2
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3284
     - 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
  3285
     is known to be a string."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3286
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3287
    ^ self , string1 , string2
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3288
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3289
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3290
concatenate:string1 and:string2 and:string3
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3291
    "return the concatenation of myself and the string arguments.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3292
     This is equivalent to self , string1 , string2 , string3
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3293
     - 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
  3294
     is known to be a string."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3295
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3296
    ^ self , string1 , string2 , string3
8040
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3297
!
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3298
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3299
contractAtBeginningTo:maxLen
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3300
    "if the receivers size is less or equal to maxLen, return it.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3301
     Otherwise, return a copy of the receiver, where some characters
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3302
     at the beginning have been replaced by '...' for a total string length
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3303
     of maxLen. Can be used to abbreviate long entries in tables."
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3304
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3305
    |sz|
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3306
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3307
    (sz := self size) <= maxLen ifTrue:[ ^ self ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3308
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3309
    ^ '...' , (self copyFrom:(sz - (maxLen - 4)))
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3310
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3311
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3312
     '12345678901234' contractAtBeginningTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3313
     '123456789012345' contractAtBeginningTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3314
     '1234567890123456' contractAtBeginningTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3315
     'aShortString' contractAtBeginningTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3316
     'aVeryLongNameForAStringThatShouldBeShortened' contractAtBeginningTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3317
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3318
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3319
    "Modified: / 24-10-2006 / 12:32:13 / cg"
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3320
!
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3321
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3322
contractAtEndTo:maxLen
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3323
    "if the receivers size is less or equal to maxLen, return it.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3324
     Otherwise, return a copy of the receiver, where some characters
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3325
     at the end have been replaced by '...' for a total string length
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3326
     of maxLen. Can be used to abbreviate long entries in tables."
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3327
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3328
    |sz|
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3330
    (sz := self size) <= maxLen ifTrue:[ ^ self ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3331
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3332
    ^ (self copyTo:maxLen-3),'...'
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3333
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
     '12345678901234' contractAtEndTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3336
     '123456789012345' contractAtEndTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3337
     '1234567890123456' contractAtEndTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3338
     'aShortString' contractAtEndTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3339
     'aVeryLongNameForAStringThatShouldBeShortened' contractAtEndTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3340
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3341
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3342
    "Modified: / 24-10-2006 / 12:32:26 / cg"
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
contractLeftTo:maxLen
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3346
    "if the receivers size is less or equal to maxLen, return it.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3347
     Otherwise, return a copy of the receiver, where some characters
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3348
     near the first quarter have been replaced by '...' for a total string length
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3349
     of maxLen.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3350
     Very similar to contractTo:, but better to abbreviate long filename entries,
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3351
     where the right part is of more use than the left."
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3352
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3353
    |sz "{ SmallInteger }"
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3354
     halfSize quarterSize "{ SmallInteger }"
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3355
     leftEnd rightEnd rightStart|
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3356
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3357
    (sz := self size) <= maxLen ifTrue:[ ^ self ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3358
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3359
    halfSize := maxLen // 2.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3360
    quarterSize := maxLen // 4.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3361
    leftEnd := quarterSize-1.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3362
    rightEnd := maxLen - leftEnd - 3.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3363
    rightStart := sz - rightEnd + 1.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3364
    ^ (self copyTo:leftEnd),'...',(self copyFrom:rightStart)
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3365
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3366
    "
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3367
     '12345678901234' contractLeftTo:15
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3368
     '123456789012345' contractLeftTo:15
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3369
     '1234567890123456' contractLeftTo:15
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3370
     'aShortString' contractLeftTo:15
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3371
     'aVeryLongNameForAStringThatShouldBeShortened' contractLeftTo:15
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3372
     '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
  3373
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3374
!
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
contractTo:maxLen
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3377
    "if the receivers size is less or equal to maxLen, return it.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3378
     Otherwise, return a copy of the receiver, where some characters
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3379
     in the middle have been replaced by '...' for a total string length
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3380
     of maxLen. Can be used to abbreviate long entries in tables."
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3381
17841
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  3382
    |sz "{ SmallInteger }" leftSize rightSize|
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3383
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3384
    (sz := self size) <= maxLen ifTrue:[ ^ self ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3385
17841
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  3386
    rightSize := maxLen // 2.
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  3387
    leftSize := maxLen - rightSize.
17900
b9614a1cf804 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17892
diff changeset
  3388
    leftSize := leftSize - 2.
b9614a1cf804 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17892
diff changeset
  3389
    rightSize := rightSize - 1.
17841
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  3390
    ^ (self copyTo:leftSize),'...',(self copyFrom:(sz+1-rightSize))
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  3391
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  3392
    "
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  3393
     '12345678901234' contractTo:15
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  3394
     '123456789012345' contractTo:15
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  3395
     '1234567890123456' contractTo:15
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  3396
     '12345678901234567' contractTo:15
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  3397
     '123456789012345678' contractTo:15
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  3398
     'aShortString' contractTo:15
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3399
     'aVeryLongNameForAStringThatShouldBeShortened' contractTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3400
     'C:\Dokumente und Einstellungen\cg\work\bosch\dapas\hw_schnittstellen\DAPAS__HpibDLL.st' contractTo:40
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  3401
     ('1234567890123456789012345678901234567' contractTo:30) size
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  3402
     ('1234567890123456789012345678901234567' contractTo:29) size
17841
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  3403
    "
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  3404
17900
b9614a1cf804 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17892
diff changeset
  3405
    "Modified (comment): / 24-11-2011 / 19:17:46 / cg"
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3406
!
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3407
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3408
copyReplaceString:subString withString:newString
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3409
    "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
  3410
     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
  3411
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3412
    |tmpStream idx idx1|
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3413
11348
366457915f90 care for wide-character strings in copyReplaceStringWithString
Claus Gittinger <cg@exept.de>
parents: 11345
diff changeset
  3414
    tmpStream := CharacterWriteStream on:(self class new).
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3415
    idx := 1.
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3416
    [idx ~~ 0] whileTrue:[
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3417
	idx1 := idx.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3418
	idx := self indexOfSubCollection:subString startingAt:idx.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3419
	idx ~~ 0 ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3420
	    tmpStream nextPutAll:(self copyFrom:idx1 to:idx-1).
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3421
	    tmpStream nextPutAll:newString.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3422
	    idx := idx + subString size
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3423
	]
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3424
    ].
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3425
    tmpStream nextPutAll:(self copyFrom:idx1).
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3426
    ^ tmpStream contents
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3427
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3428
   "
9306
de9b438212b8 comment
Stefan Vogel <sv@exept.de>
parents: 9282
diff changeset
  3429
     '12345678901234567890' copyReplaceString:'123' withString:'OneTwoThree'
de9b438212b8 comment
Stefan Vogel <sv@exept.de>
parents: 9282
diff changeset
  3430
     '12345678901234567890' copyReplaceString:'123' withString:'*'
de9b438212b8 comment
Stefan Vogel <sv@exept.de>
parents: 9282
diff changeset
  3431
     '12345678901234567890' copyReplaceString:'234' withString:'foo'
de9b438212b8 comment
Stefan Vogel <sv@exept.de>
parents: 9282
diff changeset
  3432
de9b438212b8 comment
Stefan Vogel <sv@exept.de>
parents: 9282
diff changeset
  3433
     ('a string with spaces' copyReplaceAll:$  withAll:' foo ')
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3434
	copyReplaceString:'foo' withString:'bar'
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3435
    "
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3436
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3437
    "Modified: / 31-05-1999 / 12:33:59 / cg"
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3438
    "Created: / 12-05-2004 / 12:00:00 / cg"
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3439
!
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3440
8040
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3441
copyWith:aCharacter
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3442
    "return a new string containing the receivers characters
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3443
     and the single new character, aCharacter.
8040
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3444
     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
  3445
     as argument, but equivalent to copy-and-addLast.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3446
     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
  3447
     (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
  3448
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3449
    |sz newString|
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3450
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3451
    aCharacter bitsPerCharacter > self bitsPerCharacter ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3452
	sz := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3453
	newString := aCharacter stringSpecies new:sz + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3454
	newString replaceFrom:1 to:sz with:self startingAt:1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3455
	newString at:sz+1 put:aCharacter.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3456
	^ newString.
8040
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3457
    ].
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3458
    ^ super copyWith:aCharacter
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3459
! !
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3460
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3461
!CharacterArray methodsFor:'displaying'!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3462
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3463
displayOn:aGC x:x y:y from:start to:stop
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3464
    "display the receiver on a GC"
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3465
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3466
    self displayOn:aGC x:x y:y from:start to:stop opaque:false
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3467
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3468
    "Modified: 12.5.1996 / 12:49:33 / cg"
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3469
!
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3470
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3471
displayOn:aGC x:x y:y from:start to:stop opaque:opaque
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3472
    "display the receiver on a GC"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3473
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3474
    "q&d hack"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3475
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3476
    (start == 1 and:[stop == self size]) ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3477
	self displayOn:aGC x:x y:y opaque:opaque.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3478
    ] ifFalse:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3479
	(self copyFrom:start to:stop) displayOn:aGC x:x y:y opaque:opaque.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3480
    ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3481
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3482
7082
675482728016 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7022
diff changeset
  3483
displayOn:aGc x:x y:y opaque:opaque
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3484
    "display the receiver in a graphicsContext - this method allows
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3485
     strings to be used like DisplayObjects."
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3486
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3487
    |s|
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3488
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3489
    s := self string.
7082
675482728016 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7022
diff changeset
  3490
    opaque ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3491
	aGc displayOpaqueString:s x:x y:y.
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3492
    ] ifFalse:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3493
	aGc displayString:s x:x y:y.
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3494
    ].
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  3495
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  3496
    "Modified: 11.5.1996 / 14:42:48 / cg"
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  3497
!
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  3498
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3499
displayOpaqueOn:aGC x:x y:y from:start to:stop
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3500
    "display the receiver on a GC"
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3501
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3502
    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
  3503
! !
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3504
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3505
!CharacterArray methodsFor:'emphasis'!
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3506
11632
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3507
actionForAll:aBlock
17734
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3508
    "change the action block of all characters.
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3509
     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
  3510
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3511
    ^ self asText actionForAll:aBlock
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3512
!
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3513
5732
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3514
allBold
17734
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3515
    "return a text object representing the receiver, but all boldified"
5732
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3516
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3517
    "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
  3518
    Text isNil ifTrue:[^ self].
5732
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3519
    ^ self asText allBold
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3520
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3521
    "
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3522
     Transcript showCR:'hello' asText allBold
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3523
     Transcript showCR:'hello' allBold
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3524
    "
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3525
!
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3526
5898
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3527
allItalic
17734
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3528
    "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
  3529
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3530
    "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
  3531
    Text isNil ifTrue:[^ self].
5898
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3532
    ^ self asText allItalic
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3533
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3534
    "
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3535
     Transcript showCR:'hello' asText allItalic
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3536
     Transcript showCR:'hello' allItalic
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3537
    "
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3538
!
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3539
11345
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3540
allStrikedOut
17734
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3541
    "return a text object representing the receiver, but all in strikeout"
11345
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3542
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3543
    "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
  3544
    Text isNil ifTrue:[^ self].
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3545
    ^ self asText allStrikedOut
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3546
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3547
    "
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3548
     Transcript showCR:'hello' asText allStrikedOut
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3549
     Transcript showCR:'hello' allStrikedOut
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3550
    "
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3551
!
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3552
10862
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3553
allUnderlined
17734
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3554
    "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
  3555
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3556
    "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
  3557
    Text isNil ifTrue:[^ self].
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3558
    ^ self asText allUnderlined
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3559
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3560
    "
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3561
     Transcript showCR:'hello' asText allUnderlined
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3562
     Transcript showCR:'hello' allUnderlined
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3563
    "
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3564
!
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3565
6228
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3566
colorizeAllWith:aColor
17734
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3567
    "return a text object representing the receiver, but all colorized"
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3568
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3569
    "this test allows for small non-gui apps to be built without libbasic2 (where Text is)"
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3570
    Text isNil ifTrue:[^ self].
6228
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3571
    ^ self asText colorizeAllWith:aColor
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3572
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3573
    "
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3574
     Transcript showCR:('hello' colorizeAllWith:Color red)
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3575
     Transcript showCR:('world' colorizeAllWith:Color green darkened)
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3576
    "
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3577
!
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3578
17734
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3579
colorizeAllWith:fgColor on:bgColor
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3580
    "return a text object representing the receiver, but all colorized with
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3581
     both fg and background color"
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3582
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3583
    "this test allows for small non-gui apps to be built without libbasic2 (where Text is)"
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3584
    Text isNil ifTrue:[^ self].
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3585
    ^ self asText colorizeAllWith:fgColor on:bgColor
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3586
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3587
    "
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3588
     Transcript showCR:('hello' colorizeAllWith:Color red on:Color yellow)
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3589
     Transcript showCR:('world' colorizeAllWith:Color red)
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3590
    "
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3591
!
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3592
1396
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3593
emphasis
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3594
    "return the emphasis.
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3595
     Since characterArrays do not hold any emphasis information,
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3596
     nil (no emphasis) is returned here."
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3597
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3598
    ^ RunArray new:self size withAll:nil
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3599
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3600
    "Created: 14.5.1996 / 13:58:58 / cg"
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3601
!
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3602
6655
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3603
emphasis:emphasisCollection
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3604
    ^ self asText emphasis:emphasisCollection
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3605
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3606
    "
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3607
     Transcript showCR:('hello' emphasis:#(bold bold bold bold bold))
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3608
    "
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3609
!
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3610
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3611
emphasisAt:characterIndex
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3612
    "return the emphasis at some index.
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3613
     Since characterArrays do not hold any emphasis information,
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3614
     nil (no emphasis) is returned here."
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3615
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3616
    ^ nil
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3617
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3618
    "Created: 11.5.1996 / 14:13:27 / cg"
1396
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3619
!
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3620
11632
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3621
emphasisAtPoint:aPoint on:aGC
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3622
    "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
  3623
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3624
    ^ nil
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3625
!
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3626
1396
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3627
emphasisCollection
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3628
    "return the emphasis.
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3629
     Since characterArrays do not hold any emphasis information,
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3630
     nil (no emphasis) is returned here."
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3631
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3632
    ^ RunArray new:(self size)
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3633
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3634
    "Created: 14.5.1996 / 13:58:58 / cg"
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3635
    "Modified: 14.5.1996 / 15:02:29 / cg"
3404
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  3636
!
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  3637
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3638
emphasiseFrom:start to:stop with:newEmphasis
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3639
    "set to the emphasis within some range. return the receiver"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3640
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3641
    ^ self asText emphasiseFrom:start to:stop with:newEmphasis
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3642
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3643
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3644
     'hello' emphasiseFrom:2 with:#italic
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3645
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3646
     Transcript showCR:('hello' emphasiseFrom:2 with:#italic)
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3647
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3648
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3649
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3650
emphasiseFrom:start with:newEmphasis
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3651
    "set to the emphasis within some range. return the receiver"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3652
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3653
    ^ self emphasiseFrom:start to:(self size) with:newEmphasis
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3654
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3655
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3656
     'hello' emphasiseFrom:2 with:#italic
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3657
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3658
     Transcript showCR:('hello' emphasiseFrom:2 with:#italic)
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3659
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3660
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3661
3404
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  3662
emphasizeAllWith:emphasis
17734
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3663
    "return a text object representing the receiver, but all emphasized"
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3664
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3665
    "this test allows for small non-gui apps to be built without libbasic2 (where Text is)"
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3666
    Text isNil ifTrue:[^ self].
3404
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  3667
    ^ self asText emphasizeAllWith:emphasis
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  3668
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  3669
    "
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  3670
     Transcript showCR:('hello' emphasizeAllWith:#bold)
3599
fea09a812f55 comment
Claus Gittinger <cg@exept.de>
parents: 3578
diff changeset
  3671
     Transcript showCR:('hello' emphasizeAllWith:(#color -> Color red))
fea09a812f55 comment
Claus Gittinger <cg@exept.de>
parents: 3578
diff changeset
  3672
     Transcript showCR:('hello' emphasizeAllWith:(#color -> Color red))
fea09a812f55 comment
Claus Gittinger <cg@exept.de>
parents: 3578
diff changeset
  3673
    "
fea09a812f55 comment
Claus Gittinger <cg@exept.de>
parents: 3578
diff changeset
  3674
fea09a812f55 comment
Claus Gittinger <cg@exept.de>
parents: 3578
diff changeset
  3675
    "Modified: / 17.6.1998 / 12:51:44 / cg"
5097
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3676
!
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3677
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3678
makeSelectorBoldIn:aClass
17928
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  3679
    "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
  3680
     Change myself to boldify the selector.
17928
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  3681
     Not yet implemented (could easily use the syntaxHighlighter for this ...).
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  3682
     For protocol compatibility with other smalltalks"
5097
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3683
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3684
    ^ self
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3685
17928
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  3686
    "Created: / 13-12-1999 / 21:49:24 / cg"
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  3687
!
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  3688
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  3689
withoutAnyColorEmphasis
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  3690
    "for protocol compatibility with Text"
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  3691
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  3692
    ^ self
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  3693
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  3694
    "Created: / 06-03-2012 / 18:15:38 / cg"
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  3695
!
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  3696
17734
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3697
withoutBackgroundColorEmphasis
17928
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  3698
    "for protocol compatibility with Text"
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  3699
17734
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3700
    ^ self
17928
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  3701
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  3702
    "Modified (comment): / 06-03-2012 / 18:14:27 / cg"
17734
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3703
!
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3704
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  3705
withoutEmphasis:emphasisToRemove
17928
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  3706
    "for protocol compatibility with Text"
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  3707
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  3708
    ^ self
17928
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  3709
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  3710
    "Modified (comment): / 06-03-2012 / 18:14:29 / cg"
17734
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3711
!
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3712
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3713
withoutForegroundColorEmphasis
17928
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  3714
    "for protocol compatibility with Text"
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  3715
17734
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3716
    ^ self
17928
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  3717
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  3718
    "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
  3719
! !
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3720
7265
3b007758ff5b method category rename
Claus Gittinger <cg@exept.de>
parents: 7261
diff changeset
  3721
!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
  3722
17754
5322906cdb6a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17751
diff changeset
  3723
decodeAsLiteralArray
5322906cdb6a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17751
diff changeset
  3724
    "given a literalEncoding in the receiver,
5322906cdb6a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17751
diff changeset
  3725
     create & return the corresponding object.
5322906cdb6a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17751
diff changeset
  3726
     The inverse operation to #literalArrayEncoding."
5322906cdb6a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17751
diff changeset
  3727
5322906cdb6a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17751
diff changeset
  3728
    ^ self
5322906cdb6a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17751
diff changeset
  3729
!
5322906cdb6a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17751
diff changeset
  3730
991
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
  3731
decodeFrom:encodingSymbol
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3732
    "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
  3733
     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
  3734
ca774158b317 code cleanup (removed old obsolete encoding stuff)
Claus Gittinger <cg@exept.de>
parents: 8102
diff changeset
  3735
    |myEncoding encoder|
7950
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  3736
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  3737
    encodingSymbol isNil ifTrue:[^ self].
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  3738
    myEncoding := self encoding.
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  3739
    encodingSymbol == myEncoding ifTrue:[^ self].
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  3740
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  3741
    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
  3742
    encoder isNil ifTrue:[^ self].
ca774158b317 code cleanup (removed old obsolete encoding stuff)
Claus Gittinger <cg@exept.de>
parents: 8102
diff changeset
  3743
    ^ 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
  3744
!
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
  3745
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3746
encodeFrom:oldEncoding into:newEncoding
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3747
    ^ CharacterEncoder encodeString:self from:oldEncoding into:newEncoding
17976
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  3748
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  3749
    "
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  3750
     'äüö' encodeFrom:#iso8859 into:#utf8
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  3751
     ('äüö' encodeFrom:#iso8859 into:#utf8) encodeFrom:#utf8 into:#unicode
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  3752
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3753
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3754
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3755
rot13
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3756
     "Usenet: from `rotate alphabet 13 places']
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3757
      The simple Caesar-cypher encryption that replaces each English
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3758
      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
  3759
      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
  3760
      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
  3761
      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
  3762
      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
  3763
      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
  3764
      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
  3765
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3766
    ^ self rot:13
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3767
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3768
    "
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3769
     'hello world' rot13
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3770
     'hello world' rot13 rot13
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3771
    "
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3772
!
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3773
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3774
rot:n
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3775
     "Usenet: from `rotate alphabet N places']
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3776
      The simple Caesar-cypher encryption that replaces each English
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3777
      letter with the one N places forward or back along the alphabet,
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3778
      so that 'The butler did it!!' becomes 'Gur ohgyre qvq vg!!' by rot 13
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3779
      Most Usenet news reading and posting programs include a rot13 feature.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3780
      It is used to enclose the text in a sealed wrapper that the reader must choose
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3781
      to open -- e.g., for posting things that might offend some readers, or spoilers.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3782
      A major advantage of rot13 over rot(N) for other N is that it
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3783
      is self-inverse, so the same code can be used for encoding and decoding."
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3784
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3785
    ^ self species
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3786
	streamContents:[:aStream |
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3787
	    self do:[:char |
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3788
		aStream nextPut:(char rot:n) ]]
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3789
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3790
    "
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3791
     'hello world' rot:13
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3792
     ('hello world' rot:13) rot:13
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3793
    "
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3794
!
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3795
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3796
utf8Decoded
7950
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  3797
    "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
  3798
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3799
    |in out is16Bit c|
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3800
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3801
    is16Bit := false.
11326
11ce7ae19315 changed #utf8Decoded - use CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 11320
diff changeset
  3802
    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
  3803
    in := self readStream.
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3804
    [in atEnd] whileFalse:[
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3805
	c := Character utf8DecodeFrom:in.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3806
	out nextPut:c.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3807
    ].
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3808
    ^ out contents
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3809
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3810
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3811
     #[16rC8 16rA0] asString utf8Decoded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3812
     (Character value:16r220) utf8Encoded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3813
     (Character value:16r220) utf8Encoded utf8Decoded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3814
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3815
     (Character value:16r800) utf8Encoded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3816
     (Character value:16r220) utf8Encoded utf8Decoded
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3817
    "
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3818
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3819
    "test:
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3820
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3821
      |utf8Encoding original readBack|
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3822
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3823
      1 to:16rFFFF do:[:ascii |
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3824
	original := (Character value:ascii) asString.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3825
	utf8Encoding := original utf8Encoded.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3826
	readBack := utf8Encoding utf8Decoded.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3827
	readBack = original ifFalse:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3828
	    self halt
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3829
	]
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3830
      ]
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3831
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3832
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3833
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3834
utf8DecodedWithTwoByteCharactersReplacedBy:replacementCharacter
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3835
    "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
  3836
     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
  3837
     and replace them with replacementCharacter"
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
    |in out c|
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3840
8222
f2c454a9a038 replaced '' writeStream by String writeStream
Claus Gittinger <cg@exept.de>
parents: 8124
diff changeset
  3841
    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
  3842
    in := self readStream.
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3843
    [in atEnd] whileFalse:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3844
	c := Character utf8DecodeFrom:in.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3845
	c codePoint > 16rFF ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3846
	    c := replacementCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3847
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3848
	out nextPut:c.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3849
    ].
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3850
    ^ out contents
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3851
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3852
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3853
     (Character value:16r220) utf8Encoded
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3854
	utf8DecodedWithTwoByteCharactersReplacedBy:(Character space)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3855
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3856
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3857
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3858
utf8Encoded
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3859
    "Return my UTF-8 representation as a new String"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3860
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3861
    |s|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3862
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3863
    s := WriteStream on:(String uninitializedNew:self size).
11320
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  3864
    s nextPutAllUtf8:self.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3865
    ^ s contents
11320
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  3866
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  3867
    "
17847
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  3868
     'abcde' utf8Encoded
17765
e3ee4a675abc Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17763
diff changeset
  3869
    "
e3ee4a675abc Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17763
diff changeset
  3870
e3ee4a675abc Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17763
diff changeset
  3871
    "Modified: / 11-05-2010 / 19:12:37 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3872
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3873
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3874
!CharacterArray methodsFor:'matching - glob expressions'!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3875
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3876
compoundMatch:aString
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3877
    "like match, but the receiver may be a compound match pattern,
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3878
     consisting of multiple simple GLOB patterns, separated by semicolons.
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3879
     This is usable with fileName pattern fields.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3880
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3881
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  3882
	     NOT the ST-80 meaning.
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3883
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3884
     NOTICE: the receiver is the match pattern"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3885
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3886
    ^self compoundMatch:aString ignoreCase:false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3887
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3888
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3889
     'f*' match:'foo'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3890
     'b*' match:'foo'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3891
     'f*;b*' match:'foo'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3892
     'f*;b*' match:'bar'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3893
     'f*;b*' compoundMatch:'foo'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3894
     'f*;b*' compoundMatch:'bar'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3895
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3896
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3897
    "Modified: / 30.1.1998 / 11:40:18 / stefan"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3898
    "Modified: / 16.12.1999 / 01:22:08 / cg"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3899
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3900
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3901
compoundMatch:aString ignoreCase:ignoreCase
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3902
    "like match, but the receiver may be a compound match pattern,
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3903
     consisting of multiple simple GLOB patterns, separated by semicolons.
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3904
     This is usable with fileName pattern fields.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3905
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3906
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  3907
	     NOT the ST-80 meaning.
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3908
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3909
     NOTICE: the receiver is the match pattern"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3910
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3911
    |matchers|
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3912
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3913
    matchers := self asCollectionOfSubstringsSeparatedBy:$;.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3914
    ^ matchers contains:[:aPattern |
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  3915
	aPattern match:aString ignoreCase:ignoreCase escapeCharacter:nil
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3916
      ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3917
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3918
"/    matchers do:[:aPattern |
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3919
"/        (aPattern match:aString ignoreCase:ignoreCase) ifTrue:[^ true].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3920
"/    ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3921
"/    ^ false.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3922
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3923
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3924
     'f*' match:'foo'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3925
     'b*' match:'foo'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3926
     'f*;b*' match:'foo'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3927
     'f*;b*' match:'bar'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3928
     'f*;b*' compoundMatch:'foo'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3929
     'f*;b*' compoundMatch:'bar'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3930
     'f*;b*' compoundMatch:'Foo' ignoreCase:true
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3931
     'f*;b*' compoundMatch:'Bar' ignoreCase:true
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3932
     'f*;b*' compoundMatch:'ccc' ignoreCase:true
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3933
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3934
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3935
    "Modified: / 15.4.1997 / 15:50:33 / cg"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3936
    "Modified: / 30.1.1998 / 11:40:18 / stefan"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3937
    "Created: / 16.12.1999 / 01:21:35 / cg"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3938
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3939
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3940
findMatchString:matchString
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3941
    "like findString/indexOfSubCollection, but allowing GLOB match patterns.
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3942
     find matchstring; if found, return the index;
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3943
     if not found, return 0.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3944
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3945
     NOTICE: match-meta character interpretation is like in unix-matching,
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  3946
	     NOT the ST-80 meaning.
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3947
     NOTICE: this GLOB, which is different from regex matching (see matchesRegex:)
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3948
     NOTICE: the argument is the match pattern"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3949
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3950
    ^ self findMatchString:matchString startingAt:1 ignoreCase:false ifAbsent:0
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3951
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3952
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3953
findMatchString:matchString startingAt:index
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3954
    "like findString, but allowing GLOB match patterns.
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3955
     find matchstring, starting at index. if found, return the index;
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3956
     if not found, return 0.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3957
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3958
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  3959
	     NOT the ST-80 meaning.
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3960
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3961
     NOTICE: the argument is the match pattern"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3962
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3963
    ^ self findMatchString:matchString startingAt:index ignoreCase:false ifAbsent:0
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3964
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3965
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3966
findMatchString:matchString startingAt:index ignoreCase:ignoreCase ifAbsent:exceptionBlock
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3967
    "like findString, but allowing GLOB match patterns.
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3968
     find matchstring, starting at index. if found, return the index;
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3969
     if not found, return the result of evaluating exceptionBlock.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3970
     This is a q&d hack - not very efficient.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3971
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3972
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
17976
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  3973
             NOT the ST-80 meaning.
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3974
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3975
     NOTICE: the argument is the match pattern"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3976
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3977
    |firstChar firstSet
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3978
     startIndex "{ Class: SmallInteger }"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3979
     matchSize  "{ Class: SmallInteger }"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3980
     mySize     "{ Class: SmallInteger }"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3981
     realMatchString lcChar ucChar|
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3982
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3983
    matchSize := matchString size.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3984
    matchSize == 0 ifTrue:[^ index]. "empty string matches"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3985
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3986
    realMatchString := matchString.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3987
    (realMatchString endsWith:$*) ifFalse:[
17976
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  3988
        realMatchString := realMatchString , '*'.
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  3989
        matchSize := matchSize + 1
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3990
    ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3991
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3992
    mySize := self size.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3993
    firstChar := realMatchString at:1.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3994
    firstChar == self class matchEscapeCharacter ifTrue:[
17976
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  3995
        firstChar := realMatchString at:2.
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3996
    ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3997
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3998
    firstChar asString includesMatchCharacters ifTrue:[
17976
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  3999
        index to:mySize do:[:col |
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  4000
            (realMatchString match:self from:col to:mySize ignoreCase:ignoreCase)
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  4001
            ifTrue:[^ col]
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  4002
        ].
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  4003
        ^ exceptionBlock value.
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4004
    ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4005
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4006
    lcChar := firstChar asLowercase.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4007
    ucChar := firstChar asUppercase.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4008
    (ignoreCase and:[ lcChar ~= ucChar]) ifTrue:[
17976
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  4009
        firstSet := Array with:ucChar with:lcChar.
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  4010
        startIndex := self indexOfAny:firstSet startingAt:index.
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4011
    ] ifFalse:[
17976
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  4012
        startIndex := self indexOf:firstChar startingAt:index.
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4013
    ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4014
    [startIndex == 0] whileFalse:[
17976
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  4015
        (realMatchString match:self from:startIndex to:mySize ignoreCase:ignoreCase)
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  4016
        ifTrue:[^ startIndex].
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  4017
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  4018
        firstSet notNil ifTrue:[
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  4019
            startIndex := self indexOfAny:firstSet startingAt:(startIndex + 1).
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  4020
        ] ifFalse:[
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  4021
            startIndex := self indexOf:firstChar startingAt:(startIndex + 1).
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  4022
        ].
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4023
    ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4024
    ^ exceptionBlock value
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4025
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4026
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4027
     'one two three four' findMatchString:'o[nu]'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4028
     'one two three four' findMatchString:'o[nu]' startingAt:3
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4029
     'one two three four one' findMatchString:'ONE' startingAt:3 ignoreCase:true ifAbsent:0
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4030
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4031
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4032
    "Modified: 13.9.1997 / 06:31:22 / cg"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4033
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4034
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4035
includesMatchString:matchString
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4036
    "like includesString, but allowing GLOB match patterns.
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4037
     find matchstring; if found, return true, otherwise return false.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4038
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4039
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4040
	     NOT the ST-80 meaning.
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4041
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4042
     NOTICE: the argument is the match pattern"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4043
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4044
    ^ (self findMatchString:matchString) ~~ 0
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4045
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4046
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4047
     'hello world' includesMatchString:'h*'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4048
     'hello world' includesMatchString:'h[aeiou]llo'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4049
     'hello world' includesMatchString:'wor*'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4050
     'hello world' includesMatchString:'woR*'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4051
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4052
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4053
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4054
includesMatchString:matchString caseSensitive:caseSensitive
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4055
    "like includesString, but allowing GLOB match patterns.
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4056
     find matchstring; if found, return true, otherwise return false.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4057
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4058
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4059
	     NOT the ST-80 meaning.
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4060
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4061
     NOTICE: the argument is the match pattern"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4062
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4063
    ^ (self findMatchString:matchString startingAt:1 ignoreCase:caseSensitive not ifAbsent:0) ~~ 0
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4064
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4065
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4066
     'hello world' includesMatchString:'h*' caseSensitive:true
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4067
     'hello world' includesMatchString:'h*' caseSensitive:false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4068
     'Hello world' includesMatchString:'h*' caseSensitive:true
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4069
     'Hello world' includesMatchString:'h*' caseSensitive:false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4070
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4071
     'hello world' includesMatchString:'h[aeiou]llo' caseSensitive:true
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4072
     'hello world' includesMatchString:'h[aeiou]llo' caseSensitive:false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4073
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4074
     'hello world' includesMatchString:'wor*' caseSensitive:true
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4075
     'hello world' includesMatchString:'wor*' caseSensitive:false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4076
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4077
     'hello world' includesMatchString:'woR*' caseSensitive:true
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4078
     'hello world' includesMatchString:'woR*' caseSensitive:false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4079
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4080
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4081
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4082
match:aString
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4083
    "return true if aString matches self, where self may contain GLOB meta-match
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4084
     characters $* (to match any string) or $# (to match any character).
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4085
     or [...] to match a set of characters.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4086
     Lower/uppercase are considered different.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4087
     The escape character is the backQuote.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4088
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4089
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4090
	     NOT the ST-80 meaning.
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4091
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4092
     NOTICE: the receiver is the match pattern"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4093
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4094
    ^ self match:aString from:1 to:aString size ignoreCase:false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4095
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4096
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4097
     '\*f*' match:'f'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4098
     '\*f*' match:'*f'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4099
     '*\*f*' match:'*f'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4100
     '*f*' match:'*f'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4101
     '*ute*' match:'computer'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4102
     '*uter' match:'computer'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4103
     'uter*' match:'computer'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4104
     '*ute*' match:''
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4105
     '[abcd]*' match:'computer'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4106
     '[abcd]*' match:'komputer'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4107
     '*some*compl*ern*' match:'this is some more complicated pattern match'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4108
     '*some*compl*ern*' match:'this is another complicated pattern match'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4109
     '*-hh' match:'anton-h'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4110
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4111
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4112
    "Modified: / 9.6.1998 / 18:50:00 / cg"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4113
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4114
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4115
match:aString escapeCharacter:escape
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4116
    "return true if aString matches self, where self may contain GLOB meta-match
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4117
     characters $* (to match any string) or $# (to match any character).
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4118
     or [...] to match a set of characters.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4119
     Lower/uppercase are considered different.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4120
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4121
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4122
	     NOT the ST-80 meaning.
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4123
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4124
     NOTICE: the receiver is the match pattern"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4125
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4126
    ^ self match:aString from:1 to:aString size ignoreCase:false escapeCharacter:escape
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4127
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4128
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4129
     'a\b\c\*' match:'a\b\c\d'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4130
     'a\b\c\*' match:'a\b\c\d' escapeCharacter:nil
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4131
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4132
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4133
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4134
match:aString from:start to:stop ignoreCase:ignoreCase
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4135
    "return true if part of aString matches myself,
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4136
     where self may contain GLOB meta-match
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4137
     characters $* (to match any string) or $# (to match any character)
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4138
     or [...] to match a set of characters.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4139
     If ignoreCase is true, lower/uppercase are considered the same.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4140
     The escape character is the backQuote.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4141
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4142
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4143
	     NOT the ST-80 meaning.
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4144
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4145
     NOTICE: the receiver is the match pattern"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4146
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4147
    ^ self
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4148
	match:aString from:start to:stop ignoreCase:ignoreCase
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4149
	escapeCharacter:(self class matchEscapeCharacter)
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4150
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4151
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4152
     '*ute*' match:'12345COMPUTER' from:1 to:5 ignoreCase:true
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4153
     '*ute*' match:'12345COMPUTER' from:6 to:13 ignoreCase:true
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4154
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4155
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4156
    "Modified: / 10.11.1998 / 21:43:46 / cg"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4157
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4158
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4159
match:aString from:start to:stop ignoreCase:ignoreCase escapeCharacter:escape
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4160
    "return true if part of aString matches myself,
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4161
     where self may contain GLOB meta-match
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4162
     characters $* (to match any string) or $# (to match any character)
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4163
     or [...] to match a set of characters.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4164
     If ignoreCase is true, lower/uppercase are considered the same.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4165
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4166
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4167
	     NOT the ST-80 meaning.
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4168
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4169
     NOTICE: the receiver is the match pattern"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4170
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4171
    |matchScanArray|
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4172
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4173
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4174
     keep the matchScanArray from the most recent match -
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4175
     avoids parsing the pattern over-and over if multiple searches
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4176
     are done with the same pattern.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4177
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4178
    (PreviousMatch notNil
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4179
    and:[PreviousMatch key = self]) ifTrue:[
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4180
	matchScanArray := PreviousMatch value
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4181
    ] ifFalse:[
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4182
	matchScanArray := self class matchScanArrayFrom:self escapeCharacter:escape.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4183
	matchScanArray isNil ifTrue:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4184
	    'CharacterArray [info]: invalid matchpattern:''' infoPrint. self infoPrint. ''' comparing for equality.' infoPrintCR.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4185
	    ^ self = aString
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4186
"/            ^ false
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4187
	].
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4188
	PreviousMatch := self -> matchScanArray.
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4189
    ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4190
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4191
    ^ self class
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4192
	matchScan:matchScanArray
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4193
	from:1 to:matchScanArray size
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4194
	with:aString
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4195
	from:start to:stop
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4196
	ignoreCase:ignoreCase
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4197
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4198
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4199
     '*ute*' match:'12345COMPUTER' from:1 to:5 ignoreCase:true
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4200
     '*ute*' match:'12345COMPUTER' from:6 to:13 ignoreCase:true
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4201
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4202
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4203
    "Modified: / 10.11.1998 / 21:43:46 / cg"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4204
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4205
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4206
match:aString ignoreCase:ignoreCase
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4207
    "return true if aString matches self, where self may contain GLOB meta-match
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4208
     characters $* (to match any string) or $# (to match any character)
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4209
     or [...] to match a set of characters.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4210
     If ignoreCase is true, lower/uppercase are considered the same.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4211
     The escape character is the backQuote.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4212
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4213
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4214
	     NOT the ST-80 meaning.
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4215
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4216
     NOTICE: the receiver is the match pattern"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4217
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4218
    ^ self match:aString from:1 to:aString size ignoreCase:ignoreCase
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4219
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4220
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4221
     '*ute*' match:'COMPUTER' ignoreCase:true
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4222
     '*uter' match:'COMPUTER' ignoreCase:false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4223
     '[abcd]*' match:'computer' ignoreCase:false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4224
     '[abcd]*' match:'Computer' ignoreCase:false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4225
     '[a-k]*' match:'komputer' ignoreCase:false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4226
     '[a-k]*' match:'zomputer' ignoreCase:false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4227
     '[a-k]*' match:'Komputer' ignoreCase:false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4228
     '[a-k]*' match:'Komputer' ignoreCase:true
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4229
     '*some*compl*ern*' match:'this is some more complicated pattern match' ignoreCase:true
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4230
     '*some*compl*ern*' match:'this is another complicated pattern match' ignoreCase:true
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4231
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4232
     Time millisecondsToRun:[
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4233
	Symbol allInstancesDo:[:sym |
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4234
	    '[ab]*' match:sym ignoreCase:false
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4235
	]
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4236
     ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4237
     Time millisecondsToRun:[
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4238
	Symbol allInstancesDo:[:sym |
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4239
	    '*at:*' match:sym ignoreCase:false
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4240
	]
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4241
     ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4242
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4243
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4244
    "Modified: 2.4.1997 / 17:28:58 / cg"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4245
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4246
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4247
match:aString ignoreCase:ignoreCase escapeCharacter:escape
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4248
    "return true if aString matches self, where self may contain GLOB meta-match
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4249
     characters $* (to match any string) or $# (to match any character)
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4250
     or [...] to match a set of characters.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4251
     If ignoreCase is true, lower/uppercase are considered the same.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4252
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4253
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4254
	     NOT the ST-80 meaning.
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4255
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4256
     NOTICE: the receiver is the match pattern"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4257
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4258
    ^ self match:aString from:1 to:aString size ignoreCase:ignoreCase escapeCharacter:escape
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4259
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4260
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4261
     '*ute*' match:'COMPUTER' ignoreCase:true
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4262
     '*uter' match:'COMPUTER' ignoreCase:false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4263
     '[abcd]*' match:'computer' ignoreCase:false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4264
     '[abcd]*' match:'Computer' ignoreCase:false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4265
     '[a-k]*' match:'komputer' ignoreCase:false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4266
     '[a-k]*' match:'zomputer' ignoreCase:false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4267
     '[a-k]*' match:'Komputer' ignoreCase:false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4268
     '[a-k]*' match:'Komputer' ignoreCase:true
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4269
     '*some*compl*ern*' match:'this is some more complicated pattern match' ignoreCase:true
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4270
     '*some*compl*ern*' match:'this is another complicated pattern match' ignoreCase:true
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4271
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4272
     Time millisecondsToRun:[
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4273
	Symbol allInstancesDo:[:sym |
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4274
	    '[ab]*' match:sym ignoreCase:false
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4275
	]
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4276
     ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4277
     Time millisecondsToRun:[
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4278
	Symbol allInstancesDo:[:sym |
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4279
	    '*at:*' match:sym ignoreCase:false
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4280
	]
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4281
     ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4282
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4283
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4284
    "Modified: 2.4.1997 / 17:28:58 / cg"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4285
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4286
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4287
matches:aPatternString
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4288
    "return true if the receiver matches aString, where aPatternString may contain GLOB meta-match
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4289
     characters $* (to match any string) or $# (to match any character).
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4290
     or [...] to match a set of characters.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4291
     Lower/uppercase are considered different.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4292
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4293
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4294
	     NOT the ST-80 meaning.
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4295
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4296
     NOTICE: the receiver is the match pattern"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4297
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4298
    ^ aPatternString match:self
17928
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  4299
!
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  4300
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  4301
matches:aPatternString ignoreCase:ignoreCase
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  4302
    "return true if the receiver matches aString, where aPatternString may contain GLOB meta-match
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  4303
     characters $* (to match any string) or $# (to match any character).
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  4304
     or [...] to match a set of characters.
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  4305
     Lower/uppercase are considered different.
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  4306
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  4307
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  4308
             NOT the ST-80 meaning.
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  4309
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  4310
     NOTICE: the receiver is the match pattern"
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  4311
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  4312
    ^ aPatternString match:self ignoreCase:ignoreCase
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  4313
8e8dad2e6269 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17922
diff changeset
  4314
    "Created: / 08-03-2012 / 03:11:11 / cg"
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4315
! !
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4316
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4317
!CharacterArray methodsFor:'padded copying'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4318
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4319
centerPaddedTo:newSize
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4320
     "return a new string consisting of the receivers characters,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4321
     plus spaces up to length and center the receivers characters in
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4322
     the resulting string.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4323
     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
  4324
     the original receiver is returned unchanged."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4325
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4326
     ^ self centerPaddedTo:newSize with:(Character space)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4327
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4328
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4329
     'foo' centerPaddedTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4330
     123 printString centerPaddedTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4331
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4332
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4333
    "Created: 25.11.1995 / 10:53:57 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4334
!
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4335
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4336
centerPaddedTo:size with:padCharacter
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4337
    "return a new string of length size, which contains the receiver
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4338
     centered (i.e. padded on both sides).
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4339
     Characters are filled with padCharacter.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4340
     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
  4341
     the original receiver is returned unchanged."
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4342
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4343
    |len s|
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4344
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4345
    len := self size.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4346
    (len < size) ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4347
	s := self species new:size withAll:padCharacter.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4348
	s replaceFrom:(size - len) // 2  + 1 with:self.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4349
	^ s
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4350
    ]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4351
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4352
    "
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4353
     'foo' centerPaddedTo:11 with:$.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4354
     'fooBar' centerPaddedTo:5 with:$.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4355
     123 printString centerPaddedTo:10 with:$.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4356
     (' ' , 123 printString) centerPaddedTo:10 with:$.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4357
     (Float pi printString) centerPaddedTo:15 with:(Character space)
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4358
     (Float pi printString) centerPaddedTo:15 with:$-
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4359
     (' ' , Float pi class name) centerPaddedTo:15 with:$.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4360
    "
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4361
!
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4362
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4363
decimalPaddedTo:size and:afterPeriod at:decimalCharacter
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4364
    "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
  4365
     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
  4366
     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
  4367
     to be padded).
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4368
     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
  4369
     the original receiver is returned unchanged.
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4370
     (sounds complicated ? -> see examples below)."
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4371
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4372
    ^ self
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4373
	decimalPaddedTo:size
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4374
	and:afterPeriod
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4375
	at:decimalCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4376
	withLeft:(Character space)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4377
	right:$0
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4378
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4379
    "
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4380
     '123' decimalPaddedTo:10 and:3 at:$.      -> '   123    '
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4381
     '123' decimalPaddedTo:10 and:3 at:$.      -> '   123.000'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4382
     '123.' decimalPaddedTo:10 and:3 at:$.     -> '   123.000'
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4383
     '123.1' decimalPaddedTo:10 and:3 at:$.    -> '   123.100'
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4384
     '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
  4385
     '123.123' decimalPaddedTo:10 and:3 at:$.  -> '   123.123'
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4386
    "
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4387
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4388
    "Created: 23.12.1995 / 13:11:52 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4389
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4390
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4391
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
  4392
    "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
  4393
     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
  4394
     of the period.
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4395
     Characters on the left are filled with leftPadChar.
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4396
     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
  4397
     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
  4398
     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
  4399
     the original receiver is returned unchanged.
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4400
     (sounds complicated ? -> see examples below)."
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4401
5230
655c21ffe6cc care for negative size of rest-string when decimalPadding
Claus Gittinger <cg@exept.de>
parents: 5221
diff changeset
  4402
    |s idx n rest|
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4403
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4404
    idx := self indexOf:decimalCharacter.
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4405
    idx == 0 ifTrue:[
9192
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
	"/ 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
  4408
	"/
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4409
	rightPadChar isNil ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4410
	    s := self , (self species new:afterPeriod + 1 withAll:leftPadChar)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4411
	] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4412
	    s:= self , decimalCharacter asString , (self species new:afterPeriod withAll:rightPadChar).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4413
	].
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4414
    ] ifFalse:[
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4415
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4416
	"/ the number of after-decimalPoint characters
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4417
	n := self size - idx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4418
	rest := afterPeriod - n.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4419
	rest > 0 ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4420
	    s := (self species new:rest withAll:(rightPadChar ? leftPadChar)).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4421
	] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4422
	    s := ''
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4423
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4424
	s := self , s.
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4425
    ].
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4426
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4427
    ^ s leftPaddedTo:size with:leftPadChar
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4428
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4429
    "
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4430
     '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
  4431
     '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
  4432
     '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
  4433
     '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
  4434
     '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
  4435
     '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
  4436
    "
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4437
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4438
    "Modified: 23.12.1995 / 13:08:18 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4439
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4440
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4441
leftPaddedTo:size
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4442
    "return a new string of length size, which contains the receiver
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4443
     right-adjusted (i.e. padded on the left).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4444
     Characters on the left are filled with spaces.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4445
     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
  4446
     the original receiver is returned unchanged."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4447
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4448
    ^ self leftPaddedTo:size with:(Character space)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4449
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4450
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4451
     'foo' leftPaddedTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4452
     'fooBar' leftPaddedTo:5
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4453
     123 printString leftPaddedTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4454
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4455
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4456
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4457
paddedTo:newSize
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4458
     "return a new string consisting of the receivers characters,
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4459
     plus spaces up to length.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4460
     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
  4461
     the original receiver is returned unchanged."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4462
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4463
     ^ self paddedTo:newSize with:(Character space)
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4464
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4465
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4466
     'foo' paddedTo:10
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4467
     123 printString paddedTo:10
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4468
    "
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  4469
! !
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  4470
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4471
!CharacterArray methodsFor:'printing & storing'!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4472
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4473
article
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4474
    "return an article string for the receiver."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4475
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4476
    |firstChar|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4477
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4478
    firstChar := (self at:1) asLowercase.
5848
ef81d77ca1ad UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5843
diff changeset
  4479
    ((firstChar isVowel and:[firstChar ~~ $u]) or:[firstChar == $x]) ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4480
	^ 'an'
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4481
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4482
    ^ 'a'
5848
ef81d77ca1ad UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5843
diff changeset
  4483
ef81d77ca1ad UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5843
diff changeset
  4484
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4485
	'uboot' article.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4486
	'xmas' article.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4487
	'alarm' article.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4488
	'baby' article.
5848
ef81d77ca1ad UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5843
diff changeset
  4489
    "
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4490
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4491
8049
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  4492
basicStoreString
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  4493
    "return a String for storing myself"
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  4494
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  4495
    |s n index|
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  4496
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  4497
    n := self occurrencesOf:$'.
11320
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  4498
    n ~~ 0 ifTrue:[
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4499
	s := self class new:(n + 2 + self size).
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4500
	s at:1 put:$'.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4501
	index := 2.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4502
	self do:[:thisChar |
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4503
	    (thisChar == $') ifTrue:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4504
		s at:index put:thisChar.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4505
		index := index + 1.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4506
	    ].
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4507
	    s at:index put:thisChar.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4508
	    index := index + 1.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4509
	].
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4510
	s at:index put:$'.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4511
	^ s
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4512
    ].
11320
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  4513
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4514
    ^ '''' , self , ''''
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4515
!
8049
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  4516
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4517
displayOn:aGCOrStream
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4518
    "Compatibility
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4519
     append a printed desription on some stream (Dolphin,  Squeak)
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4520
     OR:
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4521
     display the receiver in a graphicsContext at 0@0 (ST80).
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4522
     This method allows for any object to be displayed in some view
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4523
     (although the fallBack is to display its printString ...)"
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4524
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4525
    "/ what a kludge - Dolphin and Squeak mean: printOn: a stream;
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4526
    "/ ST/X (and some old ST80's) mean: draw-yourself on a GC.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4527
    (aGCOrStream isStream or:[aGCOrStream == Transcript]) ifTrue:[
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4528
	self storeOn:aGCOrStream.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4529
	^ self
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4530
    ].
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4531
    ^ super displayOn:aGCOrStream
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4532
!
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4533
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4534
printOn:aStream
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4535
    "print the receiver on aStream"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4536
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4537
    aStream nextPutAll:self
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4538
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4539
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4540
printString
17807
06cc6c49e291 merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17800
diff changeset
  4541
    "return a string for printing - that's myself"
608
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
    ^ self
3578
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4544
!
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4545
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4546
printWithQuotesDoubledOn:aStream
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4547
    "put the raw storeString of myself on aStream"
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4548
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4549
    self do:[:thisChar |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4550
	(thisChar == $') ifTrue:[aStream nextPut:thisChar].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4551
	aStream nextPut:thisChar
3578
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4552
    ]
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4553
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4554
    "Modified: / 15.6.1998 / 17:21:17 / cg"
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4555
    "Created: / 15.6.1998 / 17:22:13 / cg"
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4556
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4557
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4558
printfWith:arg1 with:arg2 with:arg3 with:arg4 with:arg5
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4559
    "Format and print the receiver with <argI> formatted in C style,
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4560
     as specified in the Unix C-language manual page for printf(3).
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4561
     Return the resulting string."
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4562
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4563
    ^ self printf:(Array with:arg1 with:arg2 with:arg3 with:arg4 with:arg5)
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4564
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4565
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4566
     Transcript showCR:('%d %05x %08o %b' printfWith:123 with:234 with:345 with:123)
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4567
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4568
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4569
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4570
!CharacterArray methodsFor:'queries'!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4571
4429
564b0fd9168e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4410
diff changeset
  4572
bitsPerCharacter
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4573
    "return the underlying strings bitsPerCharacter
4429
564b0fd9168e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4410
diff changeset
  4574
     (i.e. is it a regular String or a TwoByteString)"
564b0fd9168e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4410
diff changeset
  4575
8457
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4576
    |string max|
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4577
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4578
    (string := self string) ~~ self ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4579
	^ string bitsPerCharacter
8457
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4580
    ].
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4581
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4582
    max := 8.
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4583
    self do:[:eachCharacter |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4584
	max := max max:(eachCharacter bitsPerCharacter)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4585
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4586
    ^ max
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4587
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4588
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4589
     'hello' bitsPerCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4590
     'hello' asText allBold bitsPerCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4591
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4592
!
8457
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4593
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4594
contains8BitCharacters
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4595
    "return true, if the underlying string contains 8BitCharacters (or widers)
8457
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4596
     (i.e. if it is non-ascii)"
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4597
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4598
    |string|
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4599
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4600
    (string := self string) ~~ self ifTrue:[
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4601
	^ string contains8BitCharacters
8457
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4602
    ].
8900
8b669296f3eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8899
diff changeset
  4603
    ^ self contains:[:aCharacter | aCharacter codePoint > 16r7F ].
8457
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4604
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4605
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4606
     'hello' contains8BitCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4607
     'hello' asText allBold contains8BitCharacters
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  4608
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4609
!
4429
564b0fd9168e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4410
diff changeset
  4610
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4611
continuesWith:aString startingAt:startIndex
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4612
    "return true, if the receiver beginning at startIndex
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4613
     contains the characters in aString."
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4614
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4615
    |sz  "{Class: SmallInteger }"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4616
     idx "{Class: SmallInteger }"|
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4617
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4618
    sz := aString size.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4619
    idx := startIndex.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4620
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4621
    1 to:sz do:[:i |
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4622
	(self at:idx) ~~ (aString at:i) ifTrue:[^ false].
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4623
	idx := idx + 1
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4624
    ].
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4625
    ^ true
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4626
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4627
    "
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4628
     'hello world' continuesWith:'world' startingAt:6
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4629
     'hello world' continuesWith:'world' startingAt:7
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4630
    "
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4631
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4632
    "Created: 12.5.1996 / 15:46:40 / cg"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4633
    "Modified: 26.7.1996 / 19:08:36 / cg"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4634
!
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4635
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4636
countWords
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4637
    "return the number of words, which are separated by separators"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4638
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4639
    |tally "{ Class: SmallInteger }"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4640
     start "{ Class: SmallInteger }"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4641
     mySize "{ Class: SmallInteger }"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4642
     stop ch|
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4643
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4644
    tally := 0.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4645
    start := 1.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4646
    mySize := self size.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4647
    [start <= mySize] whileTrue:[
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4648
	ch := self at:start.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4649
	ch isSeparator ifTrue:[
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4650
	    start := start + 1
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4651
	] ifFalse:[
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4652
	    stop := self indexOfSeparatorStartingAt:start.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4653
	    (stop == 0) ifTrue:[
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4654
		stop := mySize + 1
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4655
	    ].
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4656
	    tally := tally + 1.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4657
	    start := stop
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4658
	]
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4659
    ].
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4660
    ^ tally
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4661
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4662
    "
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4663
     'hello world isnt this nice' countWords'
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4664
    "
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4665
!
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4666
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4667
defaultElement
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4668
    ^ Character space
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4669
!
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4670
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4671
encoding
1311
367f740d21e7 commentary
Claus Gittinger <cg@exept.de>
parents: 1308
diff changeset
  4672
    "return the strings encoding, as a symbol.
7982
0412a26c4621 encoding now unicode
Claus Gittinger <cg@exept.de>
parents: 7977
diff changeset
  4673
     Here, by default, we assume unicode-encoding.
0412a26c4621 encoding now unicode
Claus Gittinger <cg@exept.de>
parents: 7977
diff changeset
  4674
     Notice, that iso8859-1 is a true subset of unicode,
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4675
     and that singleByteStrings are therefore both unicode AND
7982
0412a26c4621 encoding now unicode
Claus Gittinger <cg@exept.de>
parents: 7977
diff changeset
  4676
     8859-1 encoded."
0412a26c4621 encoding now unicode
Claus Gittinger <cg@exept.de>
parents: 7977
diff changeset
  4677
17951
fa0e1d7467ea Merged with /CVS
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17944
diff changeset
  4678
    ^ #unicode
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4679
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4680
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4681
hasChangeOfEmphasis
17976
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  4682
    "return true, if the receiver contains non-empty emphasis information
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  4683
     i.e. any non-normal (=emphasized) characters"
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  4684
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4685
    ^ false
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4686
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  4687
    "Created: 12.5.1996 / 12:31:39 / cg"
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4688
!
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4689
7995
8ddbb403d67b +hasIcon and hasImage for LabelAndIcon compatibility
Claus Gittinger <cg@exept.de>
parents: 7991
diff changeset
  4690
hasIcon
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  4691
    "for LabelAndIcon compatibility"
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  4692
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4693
    ^ false
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4694
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4695
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4696
hasImage
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4697
    "for LabelAndIcon compatibility"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4698
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4699
    ^ false
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4700
!
7995
8ddbb403d67b +hasIcon and hasImage for LabelAndIcon compatibility
Claus Gittinger <cg@exept.de>
parents: 7991
diff changeset
  4701
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4702
heightOn:aGC
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4703
    "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
  4704
6528
cf4e93b8104b #on: -> #onDevice
Claus Gittinger <cg@exept.de>
parents: 6523
diff changeset
  4705
    ^ (aGC font onDevice:aGC device) heightOf:self
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4706
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4707
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4708
     'hello world' heightOn:(View new)
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4709
    "
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4710
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4711
    "Created: 12.5.1996 / 20:09:29 / cg"
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4712
    "Modified: 12.5.1996 / 20:32:05 / cg"
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4713
!
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4714
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4715
isLowercaseFirst
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4716
    "return true, if the first character is a lowercase character."
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4717
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4718
    ^ self size ~~ 0 and:[ self first isLowercase ]
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4719
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4720
    "
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4721
     'helloWorld' isLowercaseFirst
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4722
     'HelloWorld' isLowercaseFirst
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4723
    "
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4724
!
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4725
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4726
isUppercaseFirst
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4727
    "return true, if the first character is an uppercase character."
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4729
    ^ self size ~~ 0 and:[ self first isUppercase ]
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4730
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4731
    "
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4732
     'helloWorld' isUppercaseFirst
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4733
     'HelloWorld' isUppercaseFirst
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4734
    "
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4735
!
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4736
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4737
knownAsSymbol
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4738
    "for now, only single character strings are allowed as symbols.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4739
     This method is redefined in String."
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4740
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4741
    ^ false
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4742
!
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4743
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4744
leftIndent
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4745
    "if the receiver starts with spaces, return the number of spaces
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4746
     at the left - otherwise, return 0.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4747
     If the receiver consists of spaces only, return the receivers size."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4748
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4749
    |index "{Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4750
     end   "{Class: SmallInteger }"|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4751
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4752
    index := 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4753
    end := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4754
    [index <= end] whileTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4755
	(self at:index) isSeparator ifFalse:[^ index - 1].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4756
	index := index + 1
8350
d9aaa0c937cb +isValidSmalltalkIdentifier
Claus Gittinger <cg@exept.de>
parents: 8347
diff changeset
  4757
    ].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4758
    ^ end
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4759
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4760
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4761
     '    hello' leftIndent
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4762
     'foo      ' leftIndent
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4763
     '         ' leftIndent
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4764
    "
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4765
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4766
    "Modified: 20.4.1996 / 19:28:43 / cg"
8350
d9aaa0c937cb +isValidSmalltalkIdentifier
Claus Gittinger <cg@exept.de>
parents: 8347
diff changeset
  4767
!
d9aaa0c937cb +isValidSmalltalkIdentifier
Claus Gittinger <cg@exept.de>
parents: 8347
diff changeset
  4768
10437
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4769
nameSpaceSelectorParts
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4770
    "Answer the namespace and baseSelector parts of a namespace selector.
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4771
     Namespace selectors are those generated by sends from a method in a different
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4772
     namespace; they are prefixed by ':'<ns>'::'.
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4773
     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
  4774
     Experimental"
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4775
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4776
    |nsPart selPart idx|
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4777
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4778
    (self at:1) == $: ifFalse:[^ Array with:'' with:self].
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4779
    idx := self indexOf:$: startingAt:3.
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4780
    idx == 0 ifTrue:[^ Array with:'' with:self].
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4781
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4782
    (idx+2 > self size) ifTrue:[^ Array with:'' with:self].
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4783
    (self at:idx+1) == $: ifFalse:[^ Array with:'' with:self].
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4784
    nsPart := self copyFrom:2 to:idx-1.
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4785
    selPart := self copyFrom:idx+2.
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4786
    ^ Array with:nsPart with:selPart
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4787
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4788
    "test:
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4789
     self assert:('+' nameSpaceSelectorParts) = #('' '+').
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4790
     self assert:(':+' nameSpaceSelectorParts) = #('' ':+').
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4791
     self assert:(':Foo:+' nameSpaceSelectorParts) = #('' ':Foo:+').
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4792
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4793
     self assert:(':Foo::+' nameSpaceSelectorParts) = #('Foo' '+').
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4794
     self assert:(':Foo::bar:baz:' nameSpaceSelectorParts) = #('Foo' 'bar:baz:').
10437
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4795
    "
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4796
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4797
    "Created: / 05-03-2007 / 17:16:58 / cg"
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4798
    "Modified: / 06-03-2007 / 11:51:15 / cg"
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4799
!
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4800
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4801
stringSpecies
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4802
    "return the underlying strings bitsPerCharacter
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  4803
     (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
  4804
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  4805
    |string|
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  4806
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  4807
    (string := self string) == self ifTrue:[^ self class].
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  4808
    ^ string stringSpecies
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  4809
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  4810
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4811
     'hello' stringSpecies
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4812
     'hello' asText allBold stringSpecies
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4813
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4814
!
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  4815
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4816
widthFrom:startIndex to:endIndex on:aGC
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4817
    "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
  4818
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4819
    ^ (aGC font onDevice:aGC device) widthOf:self from:startIndex to:endIndex
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4820
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4821
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4822
     'hello world' widthFrom:1 to:5 on:(View new)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4823
     'hello' widthOn:(View new)
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4824
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4825
!
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4826
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4827
widthOn:aGC
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4828
    "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
  4829
6528
cf4e93b8104b #on: -> #onDevice
Claus Gittinger <cg@exept.de>
parents: 6523
diff changeset
  4830
    ^ (aGC font onDevice:aGC device) widthOf:self
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4831
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4832
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4833
     'hello world' widthOn:(View new)
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4834
    "
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4835
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4836
    "Created: 12.5.1996 / 20:09:29 / cg"
2554
309ee6707322 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2551
diff changeset
  4837
    "Modified: 17.4.1997 / 12:50:23 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4838
! !
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4839
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4840
!CharacterArray methodsFor:'special string converting'!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4841
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4842
expandPlaceholdersWith:argArrayOrDictionary
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4843
    "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
  4844
     replaced by corresponding arguments' printStrings from the argArrayOrDictionary.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4845
     I.e. 'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this') results
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4846
     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
  4847
     As an extension, the argument may also be a dictionary, providing
7313
9be9b35f5370 comment
Claus Gittinger <cg@exept.de>
parents: 7312
diff changeset
  4848
     values for symbolic keys.
4842
0086acd80497 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  4849
     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
  4850
     (%1..%9 require a numeric key in the dictionary, however)
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4851
     To get a '%' character, use a '%%'-escape.
7313
9be9b35f5370 comment
Claus Gittinger <cg@exept.de>
parents: 7312
diff changeset
  4852
     To get an integer-indexed placeHolder followed by another digit,
9be9b35f5370 comment
Claus Gittinger <cg@exept.de>
parents: 7312
diff changeset
  4853
     or an index > 9, you must use %(digit).
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4854
     See also bindWith:... for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4855
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4856
    |stream|
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4857
17742
3fef0ed4c2d5 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17735
diff changeset
  4858
    stream := (TextStream ? WriteStream) on:(self species new:self size + 20).
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4859
    self expandPlaceholdersWith:argArrayOrDictionary on:stream.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4860
    ^ stream contents.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4861
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4862
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4863
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4864
     'hello %1' expandPlaceholdersWith:#('world')
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4865
     'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this')
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4866
     'hello %2; how is %1' expandPlaceholdersWith:#('world' 'this')
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4867
     '%1 plus %2 gives %3 ' expandPlaceholdersWith:#(4 5 9)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4868
     '%%(1)0 gives %(1)0' expandPlaceholdersWith:#(123)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4869
     '%%10 gives %10' expandPlaceholdersWith:#(123)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4870
     '%%(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
  4871
     '%test gives %1' expandPlaceholdersWith:#(123)
11028
cb1ee3ddd91a expandPlaceHolders: care fr Text with emphasis
Claus Gittinger <cg@exept.de>
parents: 11018
diff changeset
  4872
     'bla %1 bla' expandPlaceholdersWith:{ 'hello' allBold }
cb1ee3ddd91a expandPlaceHolders: care fr Text with emphasis
Claus Gittinger <cg@exept.de>
parents: 11018
diff changeset
  4873
     'bla %1 bla' expandPlaceholdersWith:{ 'hello' }
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4874
    "
1026
455c9f609f4d care for 16bit strings in expandPlaceHolders
Claus Gittinger <cg@exept.de>
parents: 1025
diff changeset
  4875
4410
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  4876
    "
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  4877
     |dict|
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  4878
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  4879
     dict := Dictionary new.
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  4880
     dict at:1 put:'one'.
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  4881
     dict at:$a put:'AAAAA'.
8794
a5df33935142 nindWith supports blocks in the value dictionary
Claus Gittinger <cg@exept.de>
parents: 8710
diff changeset
  4882
     dict at:$b put:[ Time now ].
17734
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  4883
     dict at:'foo' put:[ Date today ].
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4884
     '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
  4885
    "
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  4886
2737
9f29aecea39d care for % at end in expandPlaceHolders.
Claus Gittinger <cg@exept.de>
parents: 2736
diff changeset
  4887
    "Modified: 1.7.1997 / 00:53:24 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4888
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4889
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4890
expandPlaceholdersWith:argArrayOrDictionary on:aStream
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4891
    "write the receiver to aStream, where all %i escapes are
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4892
     replaced by corresponding arguments' printStrings from the argArrayOrDictionary.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4893
     I.e. 'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this') results
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4894
     in the new string 'hello world; how is this'.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4895
     As an extension, the argument may also be a dictionary, providing
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4896
     values for symbolic keys.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4897
     In this case, %a .. %z and %(...) are also allowed.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4898
     (%1..%9 require a numeric key in the dictionary, however)
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4899
     To get a '%' character, use a '%%'-escape.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4900
     To get an integer-indexed placeHolder followed by another digit,
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4901
     or an index > 9, you must use %(digit).
10935
7142eab95639 #expandPlaceHoldersWith:in:
Stefan Vogel <sv@exept.de>
parents: 10929
diff changeset
  4902
     See also bindWith:... for VisualAge compatibility.
10939
d0ca31c1d1e9 #expandPlaceHoldersWith: handle %<cr> %<tab> etc
Stefan Vogel <sv@exept.de>
parents: 10935
diff changeset
  4903
     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
  4904
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4905
    |next v key
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4906
     idx   "{ SmallInteger }"
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4907
     idx2  "{ SmallInteger }"
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4908
     start "{ SmallInteger }"
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4909
     stop  "{ SmallInteger }"|
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4910
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4911
    stop := self size.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4912
    start := 1.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4913
    [start <= stop] whileTrue:[
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4914
	idx := self indexOf:$% startingAt:start.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4915
	(idx == 0 or:[idx == stop]) ifTrue:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4916
	    aStream nextPutAll:self startingAt:start to:stop.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4917
	    ^ self.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4918
	].
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4919
	"found a %"
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4920
	aStream nextPutAll:self startingAt:start to:(idx - 1).
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4921
	next := self at:(idx + 1).
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4922
	(next == $%) ifTrue:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4923
	    aStream nextPut:$%.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4924
	] ifFalse:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4925
	    next == $< ifTrue:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4926
		idx2 := self indexOf:$> startingAt:idx+2.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4927
		key := self copyFrom:idx+2 to:idx2-1.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4928
		idx := idx2 - 1.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4929
		key := key asSymbolIfInterned.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4930
		(#(cr tab nl return lf ff null) includesIdentical:key) ifTrue:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4931
		    aStream nextPut:(Character perform:key).
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4932
		].
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4933
	    ] ifFalse:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4934
		next isDigit ifTrue:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4935
		    v := argArrayOrDictionary at:(next digitValue) ifAbsent:''
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4936
		] ifFalse:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4937
		    next == $( ifTrue:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4938
			idx2 := self indexOf:$) startingAt:idx+2.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4939
			key := self copyFrom:idx+2 to:idx2-1.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4940
			idx := idx2 - 1.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4941
			(argArrayOrDictionary includesKey:key) ifTrue:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4942
			    v := argArrayOrDictionary at:key
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4943
			] ifFalse:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4944
			    key := key asSymbolIfInterned ? key.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4945
			    (argArrayOrDictionary includesKey:key) ifTrue:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4946
				v := argArrayOrDictionary at:key
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4947
			    ] ifFalse:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4948
				(key size == 1 and:[ argArrayOrDictionary includesKey:(key at:1)]) ifTrue:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4949
				    v := argArrayOrDictionary at:(key at:1)
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4950
				] ifFalse:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4951
				    key isNumeric ifTrue:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4952
					key := Integer readFrom:key onError:nil.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4953
				    ].
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4954
				    v := argArrayOrDictionary at:key ifAbsent:''
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4955
				]
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4956
			    ].
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4957
			].
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4958
		    ] ifFalse:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4959
			(next isLetter and:[argArrayOrDictionary isSequenceable not "is a Dictionary"]) ifTrue:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4960
			    "so next is a non-numeric single character."
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4961
			    v := argArrayOrDictionary
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4962
				    at:next
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4963
				    ifAbsent:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4964
					"try symbol instead of character"
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4965
					argArrayOrDictionary
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4966
					    at:next asSymbol
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4967
					    ifAbsent:[String with:$% with:next].
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4968
				 ].
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4969
			] ifFalse:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4970
			    v := String with:$% with:next.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4971
			].
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4972
		    ]
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4973
		].
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4974
		"/ v notNil ifTrue:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4975
		    v isBlock ifTrue:[
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4976
			v := v value
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4977
		    ].
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4978
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4979
		    v printOn:aStream.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4980
		"/ ].
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4981
	    ]
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4982
	].
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4983
	start := idx + 2
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4984
    ].
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4985
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4986
    "
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4987
     String streamContents:[:s|
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4988
	'hello %1' expandPlaceholdersWith:#('world') on:s.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4989
	s cr.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4990
	'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this') on:s.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4991
	s cr.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4992
	'hello %2; how is %1' expandPlaceholdersWith:#('world' 'this') on:s.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4993
	s cr.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4994
	'%1 plus %2 gives %3 ' expandPlaceholdersWith:#(4 5 9) on:s.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4995
	s cr.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4996
	'%%(1)0 gives %(1)0' expandPlaceholdersWith:#(123) on:s.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4997
	s cr.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4998
	'%%10 gives %10' expandPlaceholdersWith:#(123) on:s.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  4999
	s cr.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  5000
	'%%(10) gives %(10) %<cr>%<tab>next line' expandPlaceholdersWith:#(123) on:s.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  5001
	s cr.
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  5002
	'%test gives %1' expandPlaceholdersWith:#(123) on:s.
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5003
     ]
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5004
    "
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5005
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5006
    "
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5007
     |dict|
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5008
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5009
     dict := Dictionary new.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5010
     dict at:1 put:'one'.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5011
     dict at:$a put:'AAAAA'.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5012
     dict at:$b put:[ Time now ].
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5013
     String streamContents:[:s|
17909
0ab1deab8e9c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17907
diff changeset
  5014
	 'hello %1 %a %b' expandPlaceholdersWith:dict on:s.
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5015
     ].
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5016
    "
17797
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  5017
17814
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  5018
    "Modified: / 18-11-2010 / 15:43:28 / cg"
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5019
!
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5020
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5021
firstLine
17976
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  5022
    "return the first line of a multiline string"
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  5023
50c2416f962a Merged with /trunk (CVS)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17951
diff changeset
  5024
    ^ self asCollectionOfSubCollectionsSeparatedBy:(Character cr) do:[:line | ^ line].
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5025
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5026
    "
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5027
     'hello' firstLine
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5028
     '1\2\3' withCRs firstLine
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5029
     '\1\2\3' withCRs firstLine
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5030
    "
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5031
!
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5032
17921
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5033
tokensBasedOn:aCharacter
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5034
    "this is an ST-80 alias for the ST/X method
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5035
	asCollectionOfSubstringsSeparatedBy:"
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5036
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5037
    ^ self asCollectionOfSubstringsSeparatedBy:aCharacter
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5038
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5039
    "
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5040
     'hello:world:isnt:this nice' tokensBasedOn:$:
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5041
     'foo,bar,baz' tokensBasedOn:$,
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5042
     '/etc/passwd' asFilename readStream nextLine tokensBasedOn:$:
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5043
    "
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5044
!
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5045
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5046
withCEscapes
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5047
    "return a new string consisting of receivers characters
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5048
     with all special and unprintable characters replaced by \X-character escapes.
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5049
     (similar to the way C-language literal Strings are represented).
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5050
     The resulting string will contain only 7-bit ascii characters.
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5051
     Emphasis is not supported.
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5052
     The following escapes are generated:
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5053
        \r      return character
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5054
        \n      newline character
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5055
        \t      tab character
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5056
        \\      the \ character itself
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5057
        \xnn    two digit hex number defining the characters ascii value
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5058
        \unnnn  four digit hex number defining the characters ascii value
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5059
        \Unnnnnnnn  eight digit hex number defining the characters ascii value
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5060
    "
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5061
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5062
    |anyEscapeNeeded out seq|
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5063
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5064
    "
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5065
     first, check if any escape is needed and return the receiver unchanged if not
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5066
    "
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5067
    anyEscapeNeeded := self contains:[:ch | (ch codePoint between:32 and:126) not ].
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5068
    anyEscapeNeeded ifFalse:[ ^ self ].
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5069
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5070
    self hasChangeOfEmphasis ifTrue:[ self error:'emphasis not supported' ].
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5071
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5072
    out := WriteStream on:(String new:self size-1).
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5073
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5074
    self do:[:ch |
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5075
        |cp|
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5076
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5077
        (ch codePoint between:32 and:126) ifTrue:[
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5078
            out nextPut:ch
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5079
        ] ifFalse:[
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5080
            ch == Character return ifTrue:[
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5081
                seq := '\r'
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5082
            ] ifFalse:[ ch == Character nl ifTrue:[
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5083
                seq := '\n'
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5084
            ] ifFalse:[ ch == Character tab ifTrue:[
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5085
                seq := '\t'
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5086
            ] ifFalse:[ ch == $\ ifTrue:[
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5087
                seq := '\\'
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5088
            ] ifFalse:[ 
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5089
                cp := ch codePoint.
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5090
                cp <= 16rFF ifTrue:[
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5091
                    seq := '\x' , (cp printStringRadix:16 padTo:2)   
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5092
                ] ifFalse:[
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5093
                    cp <= 16rFFFF ifTrue:[
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5094
                        seq := '\u' , (cp printStringRadix:16 padTo:4)   
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5095
                    ] ifFalse:[
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5096
                        seq := '\U',(cp printStringRadix:16 padTo:8)
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5097
                    ]
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5098
                ]
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5099
            ]]]].
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5100
            out nextPutAll:seq
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5101
        ].
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5102
    ].
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5103
    ^ out contents
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5104
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5105
    "
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5106
     'hello\nworld\na\n\tnice\n\t\tstring' withoutCEscapes withCEscapes  
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5107
    "
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5108
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5109
    "Created: / 25-01-2012 / 11:08:16 / cg"
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5110
!
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5111
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5112
withCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5113
    "return a new string consisting of receivers characters
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5114
     with all \-characters replaced by cr-characters."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5115
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5116
    ^ self copyReplaceAll:$\ with:(Character cr)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5117
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5118
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5119
     'hello\world' withCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5120
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5121
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5122
    "Modified: / 18.7.1998 / 22:53:02 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5123
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5124
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5125
withEscapes
17921
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5126
    "has been renamed; the name withEscapes is misleading"
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5127
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5128
    self obsoleteMethodWarning:'use withoutCEscapes'.
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5129
    ^ self withoutCEscapes.
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5130
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5131
    "Modified: / 25-01-2012 / 10:42:30 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5132
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5133
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5134
withMatchEscapes
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5135
    "return a copy of the receiver with all match characters escaped
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5136
     by $\ characters (to be usable as a match string).
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5137
     Return the receiver, if there are none."
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5138
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  5139
    |in out c escape|
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  5140
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  5141
    escape := self class matchEscapeCharacter.
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5142
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5143
    in := self readStream.
7986
715c72e62d58 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7982
diff changeset
  5144
    out := WriteStream on:(self species new:self size).
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5145
    [in atEnd] whileFalse:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5146
	c := in next.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5147
	(c == escape or:['*[#' includes:c]) ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5148
	    out nextPut:$\.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5149
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5150
	out nextPut:c.
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5151
    ].
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5152
    ^ out contents.
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5153
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5154
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5155
     '*foo' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5156
     '\*foo' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5157
     '*foo' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5158
     '\\*foo' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5159
     'foo*' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5160
     'foo\*' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5161
     'foo\' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5162
     'f*o*o' withMatchEscapes
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5163
    "
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5164
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5165
    "Modified: 2.4.1997 / 18:13:04 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5166
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5167
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5168
withTabs
735
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  5169
    "return a string consisting of the receivers characters
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  5170
     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
  5171
     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
  5172
     otherwise a new string is returned.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5173
     Limitation: only the very first spaces are replaced
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5174
		 (i.e. if the receiver contains newLine characters,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5175
		  no tabs are inserted after those lineBreaks)"
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5176
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5177
    |idx   "{ SmallInteger }"
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5178
     nTabs "{ SmallInteger }"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5179
     newString|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5180
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5181
    idx := self findFirst:[:c | (c ~~ Character space)].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5182
    nTabs := (idx-1) // 8.
5815
4acdd87a77d4 // can return negative numbers.
Stefan Vogel <sv@exept.de>
parents: 5795
diff changeset
  5183
    nTabs <= 0 ifTrue:[^ self].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5184
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5185
    "any tabs"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5186
    newString := self class new:(self size - (nTabs * 7)).
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5187
    newString atAll:(1 to:nTabs) put:(Character tab).
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5188
    newString replaceFrom:(nTabs + 1) with:self startingAt:(nTabs * 8 + 1).
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5189
    ^ newString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5190
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5191
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5192
     '12345678901234567890' withTabs
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5193
     '       8901234567890' withTabs
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5194
     '        901234567890' withTabs
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5195
     '               67890' withTabs
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5196
     '                7890' withTabs
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5197
     '                 890' withTabs
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5198
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5199
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5200
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5201
withTabsExpanded
735
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  5202
    "return a string consisting of the receivers characters,
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5203
     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
  5204
     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
  5205
     otherwise a new string is returned.
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  5206
     This does handle multiline strings."
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5207
5741
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5208
    ^ self withTabsExpanded:8
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5209
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5210
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5211
     ('1' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5212
     ('12345' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5213
     ('123456' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5214
     ('1234567' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5215
     ('12345678' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5216
     ('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
  5217
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5218
     (String with:Character tab
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5219
	     with:Character tab
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5220
	     with:$1) withTabsExpanded
5741
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5221
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5222
     (String with:Character tab
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5223
	     with:$1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5224
	     with:Character tab
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5225
	     with:$2) withTabsExpanded
5741
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5226
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5227
     (String with:Character tab
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5228
	     with:$1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5229
	     with:Character cr
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5230
	     with:Character tab
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5231
	     with:$2) withTabsExpanded
5741
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5232
    "
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5233
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5234
    "Modified: 12.5.1996 / 13:05:10 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5235
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5236
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5237
withTabsExpanded:numSpaces
5741
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5238
    "return a string consisting of the receivers characters,
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5239
     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
  5240
     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
  5241
     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
  5242
     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
  5243
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5244
    |col    "{ SmallInteger }"
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5245
     str ch
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5246
     dstIdx "{ SmallInteger }"
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5247
     newSz  "{ SmallInteger }"
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5248
     sz "{ SmallInteger }"
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5249
     hasEmphasis e|
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5250
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5251
    (self includes:(Character tab)) ifFalse:[^ self].
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5252
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5253
    sz := self size.
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5254
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5255
    "/ count the new size first, instead of
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5256
    "/ multiple resizing (better for large strings)
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5257
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5258
    col := 1. newSz := 0.
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5259
    1 to:sz do:[:srcIdx |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5260
	ch := self at:srcIdx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5261
	ch == Character tab ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5262
	    col := col + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5263
	    newSz := newSz + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5264
	    ch == Character cr ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5265
		col := 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5266
	    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5267
	] ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5268
	    (col \\ numSpaces) to:numSpaces do:[:ii |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5269
		newSz := newSz + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5270
		col := col + 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5271
	    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5272
	]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5273
    ].
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5274
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5275
    str := self species new:newSz.
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5276
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5277
    hasEmphasis := self hasChangeOfEmphasis.
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5278
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5279
    col := 1. dstIdx := 1.
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5280
    1 to:sz do:[:srcIdx |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5281
	ch := self at:srcIdx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5282
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5283
	ch == Character tab ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5284
	    col := col + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5285
	    ch == Character cr ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5286
		col := 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5287
	    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5288
	    hasEmphasis ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5289
		e := self emphasisAt:srcIdx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5290
		str emphasisAt:dstIdx put:e
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5291
	    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5292
	    str at:dstIdx put:ch.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5293
	    dstIdx := dstIdx + 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5294
	] ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5295
	    (col \\ numSpaces) to:numSpaces do:[:ii |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5296
		str at:dstIdx put:Character space.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5297
		dstIdx := dstIdx + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5298
		col := col + 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5299
	    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5300
	]
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5301
    ].
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5302
    ^ str
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5303
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5304
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5305
     ('1' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5306
     ('1' , Character tab asString , 'x') withTabsExpanded:4
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5307
     ('12345' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5308
     ('123456' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5309
     ('1234567' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5310
     ('12345678' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5311
     ('123456789' , Character tab asString , 'x') withTabsExpanded
735
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  5312
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5313
     (String with:Character tab
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5314
	     with:Character tab
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5315
	     with:$1) withTabsExpanded
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5316
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5317
     (String with:Character tab
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5318
	     with:$1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5319
	     with:Character tab
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5320
	     with:$2) withTabsExpanded
735
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  5321
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  5322
     (String with:Character tab
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5323
	     with:$1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5324
	     with:Character cr
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5325
	     with:Character tab
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5326
	     with:$2) withTabsExpanded
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5327
    "
735
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  5328
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5329
    "Modified: 12.5.1996 / 13:05:10 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5330
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5331
17921
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5332
withoutAllSpaces
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5333
    ^ self asCollectionOfWords asStringWith:''.
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5334
"/    |col string|
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5335
"/
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5336
"/    col := self asCollectionOfWords.
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5337
"/    string := String new.
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5338
"/    col do:[:el |
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5339
"/       string := string,el
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5340
"/    ].
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5341
"/    ^string
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5342
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5343
    "
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5344
     'hello wwww'  withoutAllSpaces
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5345
     'hel   lo www   w'  withoutAllSpaces
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5346
    "
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5347
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5348
    "Modified: / 18.7.1998 / 22:53:08 / cg"
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5349
!
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5350
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5351
withoutCEscapes
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5352
    "return a new string consisting of receivers characters
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5353
     with all \X-character escapes replaced by corresponding-characters.
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5354
     (similar to the way C-language Strings are converted).
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5355
     The following escapes are supported:
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5356
        \r      return character
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5357
        \n      newline character
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5358
        \b      backspace character
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5359
        \f      formfeed character
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5360
        \t      tab character
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5361
        \e      escape character
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5362
        \\      the \ character itself
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5363
        \nnn    three digit octal number defining the characters ascii value
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5364
        \xnn    two digit hex number defining the characters ascii value
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5365
        \unnnn  four digit hex number defining the characters unicode value
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5366
        \Unnnnnnnn  eight digit hex number defining the characters unicode value
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5367
        \other  other
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5368
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5369
     Notice, that \' is NOT a valid escape, since the general syntax of
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5370
     string constants is not affected by this method.
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5371
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5372
     Although easily implementable, this is NOT done automatically
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5373
     by the compiler (due to a lack of a language standard for this).
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5374
     However, the compiler may detect sends ot #withEscapes to string literals
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5375
     and place a modified string constant into the binary/byte-code.
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5376
     Therefore, no runtime penalty will be payed for using these escapes.
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5377
     (not in pre 2.11 versions)
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5378
    "
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5379
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5380
    |val     "{ SmallInteger }"
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5381
     in out nextChar nDigits|
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5382
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5383
    "
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5384
     first, see if there is any escape; if not, return the receiver unchanged
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5385
    "
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5386
    (self includes:$\) ifFalse:[^ self ].
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5387
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5388
    self hasChangeOfEmphasis ifTrue:[ self error:'emphasis not supported' ].
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5389
    out := CharacterWriteStream on:(String new:self size - 1).
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5390
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5391
    in := ReadStream on:self.
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5392
    [in atEnd] whileFalse:[
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5393
        nextChar := in next.
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5394
        nextChar == $\ ifTrue:[
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5395
            in atEnd ifTrue:[
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5396
            ] ifFalse:[
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5397
                nextChar := in next.
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5398
                nextChar == $r ifTrue:[
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5399
                    nextChar := Character return
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5400
                ] ifFalse:[ nextChar == $n ifTrue:[
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5401
                    nextChar := Character nl
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5402
                ] ifFalse:[ nextChar == $b ifTrue:[
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5403
                    nextChar := Character backspace
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5404
                ] ifFalse:[ nextChar == $f ifTrue:[
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5405
                    nextChar := Character newPage
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5406
                ] ifFalse:[ nextChar == $t ifTrue:[
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5407
                    nextChar := Character tab
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5408
                ] ifFalse:[ nextChar == $e ifTrue:[
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5409
                    nextChar := Character esc
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5410
                ] ifFalse:[
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5411
                    nextChar == $0 ifTrue:[
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5412
                        val := 0.
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5413
                        nextChar := in peek.
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5414
                        nDigits := 1.
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5415
                        [nextChar notNil and:[nextChar isDigit and:[nDigits <= 3]]] whileTrue:[
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5416
                            val := (val * 8) + nextChar digitValue.
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5417
                            nextChar := in nextPeek.
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5418
                            nDigits := nDigits + 1.
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5419
                        ].
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5420
                        nextChar := Character value:val.
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5421
                    ] ifFalse:[
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5422
                        val := 0.
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5423
                        nextChar == $x ifTrue:[
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5424
                            2 timesRepeat:[
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5425
                                nextChar := in next.
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5426
                                val := (val * 16) + nextChar digitValue.
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5427
                            ].
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5428
                            nextChar := Character value:val.
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5429
                        ] ifFalse:[
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5430
                            nextChar == $u ifTrue:[
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5431
                                4 timesRepeat:[
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5432
                                    nextChar := in next.
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5433
                                    val := (val * 16) + nextChar digitValue.
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5434
                                ].
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5435
                                nextChar := Character value:val.
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5436
                            ] ifFalse:[
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5437
                                nextChar == $U ifTrue:[
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5438
                                    8 timesRepeat:[
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5439
                                        nextChar := in next.
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5440
                                        val := (val * 16) + nextChar digitValue.
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5441
                                    ].
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5442
                                    nextChar := Character value:val.
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5443
                                ]
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5444
                            ]
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5445
                        ]
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5446
                    ]
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5447
                ]]]]]].
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5448
            ].
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5449
        ].
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5450
        out nextPut:nextChar.
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5451
    ].
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5452
    ^ out contents
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5453
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5454
    "
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5455
     'hello world' withoutCEscapes         
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5456
     'hello\world' withoutCEscapes         
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5457
     'hello\world\' withoutCEscapes        
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5458
     'hello world\' withoutCEscapes        
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5459
     'hello\tworld' withoutCEscapes        
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5460
     'hello\nworld\na\n\tnice\n\t\tstring' withoutCEscapes
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5461
     'hello\tworld\n' withoutCEscapes   
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5462
     'hello\010world' withoutCEscapes   
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5463
     'hello\r\nworld' withoutCEscapes   
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5464
     'hello\r\n\x08world' withoutCEscapes 
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5465
     '0\x080' withoutCEscapes       
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5466
     '0\u12340' withoutCEscapes       
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5467
     '0\U123456780' withoutCEscapes       
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5468
     '0\0a' withoutCEscapes     
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5469
     '0\00a' withoutCEscapes       
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5470
     '0\000a' withoutCEscapes       
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5471
     '0\0000a' withoutCEscapes       
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5472
     '0\00000a' withoutCEscapes       
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5473
     '0\03770' withoutCEscapes       
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5474
    "
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5475
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5476
    "Created: / 25-01-2012 / 10:41:44 / cg"
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5477
!
4069fe8e9039 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17911
diff changeset
  5478
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5479
withoutCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5480
    "return a new collection consisting of receivers elements
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5481
     with all cr-characters replaced by \-characters.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5482
     This is the reverse operation of withCRs."
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
    ^ self copyReplaceAll:(Character cr) with:$\
17734
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  5485
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5486
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5487
     'hello
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5488
world' withoutCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5489
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5490
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5491
    "Modified: / 18.7.1998 / 22:53:08 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5492
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5493
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5494
withoutLeadingSeparators
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5495
    "return a copy of myself without leading separators.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5496
     Notice: this does remove tabs, newline or any other whitespace.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5497
     Returns an empty string, if the receiver consist only of whitespace."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5498
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5499
    |index|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5500
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5501
    index := self indexOfNonSeparatorStartingAt:1.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5502
    index ~~ 0 ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5503
	index == 1 ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5504
	    ^ self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5505
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5506
	^ self copyFrom:index
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5507
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5508
    ^ ''
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5509
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5510
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5511
     '    foo    ' withoutLeadingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5512
     'foo    '     withoutLeadingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5513
     '    foo'     withoutLeadingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5514
     '       '     withoutLeadingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5515
     'foo'         withoutLeadingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5516
     ('  ' , Character tab asString , ' foo   ') withoutLeadingSeparators inspect
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5517
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5518
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5519
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5520
withoutMatchEscapes
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5521
    "return a copy of the receiver with all $\ removed or
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5522
     the receiver, if there are none."
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5523
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  5524
    |in out c escape|
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  5525
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  5526
    escape := self class matchEscapeCharacter.
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5527
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5528
    in := self readStream.
8222
f2c454a9a038 replaced '' writeStream by String writeStream
Claus Gittinger <cg@exept.de>
parents: 8124
diff changeset
  5529
    out := self species writeStream.
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5530
    [in atEnd] whileFalse:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5531
	c := in next.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5532
	c == escape ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5533
	    in atEnd ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5534
		c := in next.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5535
	    ]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5536
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5537
	out nextPut:c.
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5538
    ].
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5539
    ^ out contents.
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5540
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5541
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5542
     '*foo' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5543
     '\*foo' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5544
     '*foo' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5545
     '\\*foo' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5546
     'foo*' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5547
     'foo\*' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5548
     'foo\' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5549
     'f\*o\*o' withoutMatchEscapes
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5550
    "
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5551
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5552
    "Modified: 30.6.1997 / 13:40:23 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5553
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5554
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5555
withoutPrefix:aString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5556
    "if the receiver startsWith aPrefix, return a copy without it.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5557
     Otherwise return the receiver"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5558
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5559
    (self startsWith:aString) ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5560
	^ self copyFrom:aString size + 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5561
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5562
    ^ self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5563
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5564
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5565
     'helloworld' withoutPrefix:'hello'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5566
     'helloworld' withoutPrefix:'foo'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5567
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5568
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5569
10671
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5570
withoutQuotes
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5571
    "remove quotes ("" and ') from the front and the end of myself"
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5572
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5573
    |result quote|
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5574
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5575
    result := self.
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5576
    ((result startsWith:$") or:[(result startsWith:$')]) ifTrue:[
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5577
	quote := result at:1.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5578
	result := result copyFrom:2.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5579
	(result endsWith:quote) ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5580
	    result := result copyWithoutLast:1
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5581
	].
10671
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5582
    ].
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5583
    ^ result
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5584
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5585
"/    '"hello"' withoutQuotes
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5586
"/    '''hello''' withoutQuotes
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5587
"/    'hello' withoutQuotes
10671
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5588
!
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5589
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5590
withoutSeparators
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5591
    "return a copy of myself without leading and trailing whitespace.
4156
3079a5a94617 comments
Claus Gittinger <cg@exept.de>
parents: 4117
diff changeset
  5592
     (but whiteSpace in-between is preserved)
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5593
     Whitespace is space, tab, newline, formfeed.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5594
     Use withoutSpaces, if you want to remove spaces only."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5595
17734
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  5596
    ^ self trimForWhich:[:ch | ch isSeparator]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5597
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5598
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5599
     '    foo    ' withoutSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5600
     '    foo' withoutSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5601
     'foo    ' withoutSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5602
     '       ' withoutSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5603
     ('  foo' , Character tab asString , '    ') withoutSeparators inspect
17734
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  5604
     '    foo    ' asUnicode16String withoutSeparators
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5605
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5606
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5607
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5608
withoutSpaces
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5609
    "return a copy of myself without leading and trailing spaces.
4156
3079a5a94617 comments
Claus Gittinger <cg@exept.de>
parents: 4117
diff changeset
  5610
     (but spaces in-between are preserved)
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5611
     Notice: this does NOT remove tabs, newline or any other whitespace.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5612
     Use withoutSeparators for this."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5613
17734
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  5614
    ^ self trimForWhich:[:ch | ch == Character space]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5615
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5616
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5617
     '    foo    ' withoutSpaces
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5618
     'foo    '     withoutSpaces
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5619
     '    foo'     withoutSpaces
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5620
     '       '     withoutSpaces
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5621
     'a     b'     withoutSpaces
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5622
     ('  foo' , Character tab asString , '    ') withoutSpaces inspect
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5623
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5624
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5625
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5626
withoutTrailingSeparators
915
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  5627
    "return a copy of myself without trailing separators.
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  5628
     Notice: this does remove tabs, newline or any other whitespace.
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  5629
     Returns an empty string, if the receiver consist only of whitespace."
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  5630
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5631
    ^ self withoutTrailingForWhich:[:ch | ch isSeparator]
915
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  5632
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  5633
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5634
     '    foo    ' withoutTrailingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5635
     'foo    '     withoutTrailingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5636
     '    foo'     withoutTrailingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5637
     '       '     withoutTrailingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5638
     'foo'         withoutTrailingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5639
     ('  ' , Character tab asString , ' foo   ') withoutTrailingSeparators inspect
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5640
     ('   foo' , Character tab asString) withoutTrailingSeparators inspect
915
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  5641
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5642
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5643
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5644
!CharacterArray methodsFor:'substring searching'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5645
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5646
findString:subString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5647
    "find a substring. if found, return the index;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5648
     if not found, return 0."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5649
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5650
    ^ self indexOfSubCollection:subString startingAt:1 ifAbsent:0 caseSensitive:true
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5651
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5652
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5653
     'hello world' findString:'llo'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5654
     'hello world' findString:'ole'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5655
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5656
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5657
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5658
findString:subString ifAbsent:exceptionBlock
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5659
    "find a substring. If found, return the index;
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5660
     if not found, return the result of evaluating exceptionBlock."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5661
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5662
    ^ self indexOfSubCollection:subString startingAt:1 ifAbsent:exceptionBlock caseSensitive:true
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5663
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5664
11018
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5665
findString:subString ignoreCase:ignoreCase
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5666
    "find a substring. if found, return the index;
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5667
     if not found, return 0."
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5668
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5669
    ^ self indexOfSubCollection:subString startingAt:1 ifAbsent:0 caseSensitive:ignoreCase not
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5670
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5671
    "
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5672
     'hello world' findString:'LLo' ignoreCase:false
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5673
     'hello world' findString:'LLo' ignoreCase:true
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5674
    "
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5675
!
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5676
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5677
findString:subString startingAt:index
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5678
    "find a substring, starting at index. if found, return the index;
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5679
     if not found, return 0."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5680
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5681
    ^ self indexOfSubCollection:subString startingAt:index ifAbsent:0 caseSensitive:true
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5682
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5683
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5684
     'hello yello' findString:'llo' startingAt:1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5685
     'hello yello' findString:'llo' startingAt:5
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5686
     'hello yello' findString:'llo' startingAt:15
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5687
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5688
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5689
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5690
findString:subString startingAt:index ifAbsent:exceptionBlock
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5691
    "find a substring, starting at index. if found, return the index;
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5692
     if not found, return the result of evaluating exceptionBlock."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5693
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5694
    ^ self indexOfSubCollection:subString startingAt:index ifAbsent:exceptionBlock caseSensitive:true
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5695
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5696
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5697
findString:subString startingAt:index ifAbsent:exceptionBlock caseSensitive:caseSensitive
10929
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  5698
    "find a substring, starting at index. if found, return the index;
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  5699
     if not found, return the result of evaluating exceptionBlock."
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  5700
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  5701
    ^ self indexOfSubCollection:subString startingAt:index ifAbsent:exceptionBlock caseSensitive:caseSensitive
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  5702
!
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  5703
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5704
includesString:aString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5705
    "return true, if a substring is contained in the receiver"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5706
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5707
    ^ (self indexOfSubCollection:aString startingAt:1 ifAbsent:0 caseSensitive:true) ~~ 0
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5708
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5709
    "
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5710
     'hello world' includesString:'hel'
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5711
     'hello world' includesString:'rld'
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5712
     'hello world' includesString:'llo'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5713
     'hello world' includesString:'LLO'
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5714
     'hello world' includesString:''
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5715
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5716
!
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  5717
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  5718
includesString:aString caseSensitive:caseSensitive
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5719
    "return true, if a substring is contained in the receiver"
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5720
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5721
    ^ (self indexOfSubCollection:aString startingAt:1 ifAbsent:0 caseSensitive:caseSensitive) ~~ 0
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5722
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5723
    "
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5724
     'hello world' includesString:'hel' caseSensitive:true
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5725
     'hello world' includesString:'HEL' caseSensitive:true
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5726
     'hello world' includesString:'HEL' caseSensitive:false
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5727
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5728
     'hello world' includesString:'wor' caseSensitive:true
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5729
     'hello world' includesString:'WOR' caseSensitive:true
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5730
     'hello world' includesString:'WOR' caseSensitive:false
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5731
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5732
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5733
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5734
indexOfSubCollection:subString startingAt:index ifAbsent:exceptionBlock
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5735
    "find a substring, starting at index. if found, return the index;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5736
     if not found, return the result of evaluating exceptionBlock.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5737
     This is a q&d hack - not very efficient"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5738
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5739
    ^ self indexOfSubCollection:subString startingAt:index ifAbsent:exceptionBlock caseSensitive:true.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5740
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5741
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5742
indexOfSubCollection:subString startingAt:index ifAbsent:exceptionBlock caseSensitive:caseSensitive
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5743
    "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
  5744
     if not found, return the result of evaluating exceptionBlock.
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5745
     This is a q&d hack - not very efficient"
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5746
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5747
    |firstChar found
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5748
     startIndex "{ Class: SmallInteger }"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5749
     subSize    "{ Class: SmallInteger }"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5750
     mySize     "{ Class: SmallInteger }"
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5751
     runIdx     "{ Class: SmallInteger }"
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5752
     tester|
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5753
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5754
    subSize := subString size.
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5755
    subSize == 0 ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5756
	subString isString ifFalse:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5757
	   self error:'non string argument' mayProceed:true.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5758
	].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5759
	"empty string does not match"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5760
	^ 0.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5761
	"empty string matches"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5762
	^ index
6122
a98958f1c85f handle non-string arg to indexOfSubString:
Claus Gittinger <cg@exept.de>
parents: 6119
diff changeset
  5763
    ].
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5764
    tester := caseSensitive
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5765
		ifTrue:[  [:c1 :c2 | c1 = c2 ]  ]
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5766
		ifFalse:[ [:c1 :c2 | c1 sameAs: c2 ] ].
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5767
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5768
    mySize := self size.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5769
    firstChar := subString at:1.
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5770
    caseSensitive ifTrue:[
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5771
	startIndex := self indexOf:firstChar startingAt:index.
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5772
    ] ifFalse:[
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5773
	startIndex := self findFirst:[:c | c sameAs:firstChar] startingAt:index.
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5774
    ].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5775
    [startIndex == 0] whileFalse:[
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5776
	runIdx := startIndex.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5777
	found := true.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5778
	1 to:subSize do:[:i |
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5779
	    runIdx > mySize ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5780
		found := false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5781
	    ] ifFalse:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5782
		(tester value:(subString at:i) value:(self at:runIdx)) ifFalse:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5783
		    found := false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5784
		]
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5785
	    ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5786
	    runIdx := runIdx + 1
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5787
	].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5788
	found ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5789
	    ^ startIndex
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5790
	].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5791
	caseSensitive ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5792
	    startIndex := self indexOf:firstChar startingAt:(startIndex + 1)
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5793
	] ifFalse:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5794
	    startIndex := self findFirst:[:c | c sameAs:firstChar] startingAt:(startIndex + 1).
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5795
	].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5796
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5797
    ^ exceptionBlock value
1005
4507487e0be6 more on encoding/decoding (still unfinished)
Claus Gittinger <cg@exept.de>
parents: 997
diff changeset
  5798
4507487e0be6 more on encoding/decoding (still unfinished)
Claus Gittinger <cg@exept.de>
parents: 997
diff changeset
  5799
    "Modified: 23.2.1996 / 15:35:15 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5800
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5801
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5802
restAfter:keyword withoutSeparators:strip
651
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5803
    "compare the left of the receiver with keyword,
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5804
     if it matches return the right.
651
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5805
     Finally, if strip is true, remove whiteSpace.
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5806
     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
  5807
	something: rest
759
908363ce8a32 interest is written with one 'r' (shame on me)
Claus Gittinger <cg@exept.de>
parents: 735
diff changeset
  5808
     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
  5809
     begins with something.
651
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5810
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5811
     You may wonder why such a specialized method exists here
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5812
     - this is so common when processing mailboxes,
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5813
     rcs files, nntp/pop3 responses, that is was considered worth
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5814
     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
  5815
     times in variuos places."
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5816
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5817
    |rest|
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5818
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5819
    (self startsWith:keyword) ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5820
	rest := self copyFrom:(keyword size + 1).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5821
	strip ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5822
	    rest := rest withoutSeparators
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
	^ rest
651
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5825
    ].
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5826
    ^ nil
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5827
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5828
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5829
     'foo: hello world' restAfter:'foo:' withoutSeparators:true
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5830
     'funny: something' restAfter:'foo:' withoutSeparators:true
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5831
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5832
     'foo:     hello world    ' restAfter:'foo:' withoutSeparators:true
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5833
     'foo:     hello world    ' restAfter:'foo:' withoutSeparators:false
651
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5834
    "
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5835
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5836
    "Created: 25.11.1995 / 11:04:18 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5837
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5838
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5839
!CharacterArray methodsFor:'testing'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5840
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5841
isAlphaNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5842
    "return true, if the receiver is some alphanumeric word;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5843
     i.e. consists of a letter followed by letters or digits."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5844
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5845
    self size == 0 ifTrue:[
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5846
	"mhmh what is this ?"
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5847
	^ false
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5848
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5849
    (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
  5850
    ^ self conform:[:char | char isLetterOrDigit].
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  5851
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  5852
    "
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5853
     'helloWorld' isAlphaNumeric
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5854
     'foo1234' isAlphaNumeric
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5855
     'f1234' isAlphaNumeric
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5856
     '1234' isAlphaNumeric
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5857
     '+' isAlphaNumeric
10093
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  5858
    "
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  5859
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  5860
    "Modified: / 13-10-2006 / 12:53:49 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5861
!
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5862
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5863
isBinarySelector
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5864
    "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
  5865
     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
  5866
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5867
    |binopChars|
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5868
17841
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  5869
    (self size > Scanner maxBinarySelectorSize) ifTrue:[^ false].
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5870
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5871
    binopChars := Scanner binarySelectorCharacters.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5872
    ^ (self conform:[:char | (binopChars includes:char)])
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5873
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5874
    "
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5875
     'foo:bar:' isBinarySelector
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5876
     #foo:bar: isBinarySelector
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5877
     'hello' isBinarySelector
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5878
     '+' isBinarySelector
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5879
     '|' isBinarySelector
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5880
     '?' isBinarySelector
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5881
     ':' isBinarySelector
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5882
     'a:' isBinarySelector
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5883
     '->' isBinarySelector
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5884
     '<->' isBinarySelector
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5885
     '::' isBinarySelector
7482
e73c296fa7dc + isBinarySelector
Claus Gittinger <cg@exept.de>
parents: 7423
diff changeset
  5886
    "
e73c296fa7dc + isBinarySelector
Claus Gittinger <cg@exept.de>
parents: 7423
diff changeset
  5887
e73c296fa7dc + isBinarySelector
Claus Gittinger <cg@exept.de>
parents: 7423
diff changeset
  5888
    "Modified: 4.1.1997 / 14:16:14 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5889
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5890
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5891
isBlank
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5892
    "return true, if the receiver contains spaces only"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5893
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5894
    ^ (self contains:[:char | char ~~ Character space]) not
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5895
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5896
    "
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5897
     '' isBlank
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5898
     '   a    ' isBlank
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5899
     '        ' isBlank
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5900
     '        ' asUnicode16String isBlank
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5901
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5902
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5903
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5904
isKeywordSelector
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5905
    "return true, iff there are only alphanumeric or underline characters separated by colons.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5906
     Must end with a colon."
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5907
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5908
    |state|
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5909
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5910
    state := #initial.
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5911
    self do:[:char |
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5912
	(state == #initial or:[ state == #gotColon]) ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5913
	    (char isLetter or:[ char == $_ ]) ifFalse:[^ false].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5914
	    state := #gotCharacter.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5915
	] ifFalse:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5916
	    char == $: ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5917
		state := #gotColon.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5918
	    ] ifFalse:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5919
		(char isLetterOrDigit or:[char == $_]) ifFalse:[^ false].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5920
	    ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5921
	].
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5922
    ].
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5923
    ^ state == #gotColon.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5924
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5925
    "
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5926
     self assert:(':' isKeywordSelector not).
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5927
     self assert:(':a' isKeywordSelector not).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5928
     self assert:('1:' isKeywordSelector not).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5929
     self assert:('a:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5930
     self assert:('_:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5931
     self assert:('_a:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5932
     self assert:('_1:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5933
     self assert:('_1::' isKeywordSelector not).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5934
     self assert:('_:_:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5935
     self assert:('a:b:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5936
     self assert:('aa:bb:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5937
     self assert:('aa:bb:a' isKeywordSelector not).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5938
     self assert:('1:2:' isKeywordSelector not).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5939
    "
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5940
!
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5941
10431
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5942
isNameSpaceSelector
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5943
    "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
  5944
     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
  5945
     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
  5946
     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
  5947
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5948
    |i|
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5949
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5950
    (self first == $:) ifFalse:[^ false].
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5951
    i := self indexOf:$: startingAt:2.
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5952
    i == 0 ifTrue:[^ false].
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5953
    self size <= (i+1) ifTrue:[^ false].
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5954
    (self at:i+1) == $: ifFalse:[^ false].
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5955
    (self at:i+2) == $: ifTrue:[^ false].
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5956
    "/ 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
  5957
    ^ true
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5958
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5959
    "test:
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5960
     self assert:('+' isNameSpaceSelector) not.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5961
     self assert:(':+' isNameSpaceSelector) not.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5962
     self assert:(':Foo:+' isNameSpaceSelector) not.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5963
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5964
     self assert:(':Foo::+' isNameSpaceSelector).
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5965
     self assert:(':Foo::bar:baz:' isNameSpaceSelector).
10431
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5966
    "
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5967
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5968
    "Created: / 05-03-2007 / 11:35:31 / cg"
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5969
!
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5970
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5971
isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5972
    "return true, if the receiver is some numeric word;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5973
     i.e. consists only of digits."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5974
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5975
    self size == 0 ifTrue:[
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5976
	^ false
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5977
    ].
10093
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  5978
    ^ self conform:[:char | char isDigit]
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5979
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5980
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5981
     'helloWorld' isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5982
     'foo1234' isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5983
     'f1234' isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5984
     '1234' isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5985
     '+' isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5986
    "
10093
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  5987
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  5988
    "Modified: / 13-10-2006 / 12:54:12 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5989
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5990
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5991
isString
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5992
    "return true, if the receiver is some kind of string;
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5993
     true is returned here - redefinition of Object>>isString."
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5994
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5995
    ^ true
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5996
!
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5997
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5998
isUnarySelector
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5999
    "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
  6000
9471
7b1df2a2a2d7 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9425
diff changeset
  6001
    ^ (self first isLetter or:[ self first == $_ ])
9845
361f4b5d7b19 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9522
diff changeset
  6002
      and:[ self conform: [ :chr | chr isLetterOrDigit or:[chr == $_] ]]
361f4b5d7b19 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9522
diff changeset
  6003
361f4b5d7b19 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9522
diff changeset
  6004
    "Modified: / 13-09-2006 / 11:35:15 / cg"
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6005
!
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6006
17940
985e22966acb Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17928
diff changeset
  6007
isUnicode16String
985e22966acb Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17928
diff changeset
  6008
    ^ false
985e22966acb Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17928
diff changeset
  6009
!
985e22966acb Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17928
diff changeset
  6010
985e22966acb Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17928
diff changeset
  6011
isUnicode32String
985e22966acb Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17928
diff changeset
  6012
    ^ false
985e22966acb Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17928
diff changeset
  6013
!
985e22966acb Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17928
diff changeset
  6014
985e22966acb Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17928
diff changeset
  6015
isUnicodeString
985e22966acb Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17928
diff changeset
  6016
    ^ false
985e22966acb Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17928
diff changeset
  6017
!
985e22966acb Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17928
diff changeset
  6018
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6019
isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6020
    "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
  6021
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6022
    |scanner tok|
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6023
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6024
    scanner := Compiler new.
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6025
    scanner source:(self readStream).
11630
6db5956f188f isValidSmalltalkIdentifier: return true/false (catch parseError)
Claus Gittinger <cg@exept.de>
parents: 11565
diff changeset
  6026
    Parser parseErrorSignal handle:[:ex |
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  6027
	tok := nil.
11630
6db5956f188f isValidSmalltalkIdentifier: return true/false (catch parseError)
Claus Gittinger <cg@exept.de>
parents: 11565
diff changeset
  6028
    ] do:[
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  6029
	tok := scanner nextToken.
11630
6db5956f188f isValidSmalltalkIdentifier: return true/false (catch parseError)
Claus Gittinger <cg@exept.de>
parents: 11565
diff changeset
  6030
    ].
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6031
    tok ~~ #Identifier ifTrue:[
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  6032
	^ false
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6033
    ].
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6034
    scanner tokenPosition == 1 ifFalse:[^ false].
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6035
    ^ scanner sourceStream atEnd.
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6036
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6037
    "
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6038
     'foo' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6039
     '1foo' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6040
     '_foo' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6041
     '_foo_bar_' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6042
     'foo ' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6043
     ' foo' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6044
    "
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6045
!
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6046
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6047
numArgs
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6048
    "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
  6049
9038
d75b89570ec0 numArgs fixed (binOps can now be longer)
Claus Gittinger <cg@exept.de>
parents: 9019
diff changeset
  6050
    |binopChars|
d75b89570ec0 numArgs fixed (binOps can now be longer)
Claus Gittinger <cg@exept.de>
parents: 9019
diff changeset
  6051
d75b89570ec0 numArgs fixed (binOps can now be longer)
Claus Gittinger <cg@exept.de>
parents: 9019
diff changeset
  6052
    (self size <= Scanner maxBinarySelectorSize) ifTrue:[
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6053
	binopChars := Scanner binarySelectorCharacters.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6054
	(self conform:[:eachChar | (binopChars includes:eachChar)]) ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6055
	    ^ 1
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6056
	].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6057
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6058
    ^ self occurrencesOf:$:
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6059
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6060
    "
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6061
     'foo:bar:' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6062
     #foo:bar: numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6063
     'hello' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6064
     '+' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6065
     '++' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6066
     '+++' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6067
     '|' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6068
     '?' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6069
     '_' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6070
     '_:' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6071
     '_:_:' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6072
     '<->' numArgs
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6073
    "
2051
08fd6a693ee3 ask Scanner for valid binarySelector characters in numArgs
Claus Gittinger <cg@exept.de>
parents: 1978
diff changeset
  6074
10088
b8e69093ca13 code cleanup
Claus Gittinger <cg@exept.de>
parents: 10061
diff changeset
  6075
    "Modified: / 13-10-2006 / 11:52:33 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6076
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6077
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6078
partsIfSelector
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6079
    "treat the receiver as a message selector, return a collection of parts."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6080
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6081
    |idx1 "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6082
     coll idx2 sz|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6083
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6084
    coll := OrderedCollection new.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6085
    idx1 := 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6086
    sz := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6087
    [true] whileTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6088
	idx2 := self indexOf:$: startingAt:idx1 + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6089
	(idx2 == 0 or:[idx2 == sz]) ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6090
	    coll add:(self copyFrom:idx1).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6091
	    ^ coll
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6092
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6093
	coll add:(self copyFrom:idx1 to:idx2).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6094
	idx1 := idx2 + 1
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  6095
    ].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6096
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6097
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6098
     'foo:bar:' partsIfSelector
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6099
     #foo:bar: partsIfSelector
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6100
     'hello' partsIfSelector
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6101
     '+' partsIfSelector
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6102
    "
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  6103
! !
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  6104
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6105
!CharacterArray methodsFor:'tracing'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6106
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6107
traceInto:aRequestor level:level from:referrer
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6108
    "double dispatch into tracer, passing my type implicitely in the selector"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6109
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6110
    ^ aRequestor traceCharacterArray:self level:level from:referrer
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6111
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6112
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6113
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6114
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6115
!CharacterArray methodsFor:'visiting'!
8395
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  6116
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  6117
acceptVisitor:aVisitor with:aParameter
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  6118
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  6119
    ^ aVisitor visitString:self with:aParameter
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  6120
! !
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  6121
1849
9f35f5934ec6 added msdos-latin1 en/decoder (code = #msdos850)
Claus Gittinger <cg@exept.de>
parents: 1669
diff changeset
  6122
!CharacterArray class methodsFor:'documentation'!
629
2ceefe9b5a19 version at the end
Claus Gittinger <cg@exept.de>
parents: 608
diff changeset
  6123
2ceefe9b5a19 version at the end
Claus Gittinger <cg@exept.de>
parents: 608
diff changeset
  6124
version
17993
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  6125
    ^ '$Header: /cvs/stx/stx/libbasic/CharacterArray.st,v 1.481 2012/10/31 19:10:50 cg Exp $'
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  6126
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  6127
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  6128
version_CVS
17993
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  6129
    ^ '§Header: /cvs/stx/stx/libbasic/CharacterArray.st,v 1.481 2012/10/31 19:10:50 cg Exp §'
17865
598963c6ff8e Recommited from itself
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17859
diff changeset
  6130
!
598963c6ff8e Recommited from itself
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17859
diff changeset
  6131
598963c6ff8e Recommited from itself
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17859
diff changeset
  6132
version_SVN
17993
956342c369a2 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17976
diff changeset
  6133
    ^ '$Id: CharacterArray.st 10876 2012-11-30 17:19:23Z vranyj1 $'
629
2ceefe9b5a19 version at the end
Claus Gittinger <cg@exept.de>
parents: 608
diff changeset
  6134
! !
6809
72fee17c14b1 utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6743
diff changeset
  6135
17846
24edc476ac18 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17845
diff changeset
  6136
CharacterArray initialize!