CharacterArray.st
author Claus Gittinger <cg@exept.de>
Wed, 25 Jan 2012 11:47:19 +0100
changeset 13987 6416fed39dbd
parent 13882 187a02bd5c99
child 13996 a86faa4f17b8
permissions -rw-r--r--
added: #withCEscapes #withoutCEscapes changed: #withEscapes category of: #tokensBasedOn: #withoutAllSpaces
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
     1
"
af7aeb79b25e Initial revision
claus
parents:
diff changeset
     2
 COPYRIGHT (c) 1994 by Claus Gittinger
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
     3
	      All Rights Reserved
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
     4
af7aeb79b25e Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
af7aeb79b25e Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
af7aeb79b25e Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
af7aeb79b25e Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
af7aeb79b25e Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    11
"
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
    12
"{ Package: 'stx:libbasic' }"
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
    13
3926
4cc33691696a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3879
diff changeset
    14
ByteArray variableByteSubclass:#CharacterArray
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
    15
	instanceVariableNames:''
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
    16
	classVariableNames:'PreviousMatch DecoderTables EncoderTables DecodingFailedSignal
11348
366457915f90 care for wide-character strings in copyReplaceStringWithString
Claus Gittinger <cg@exept.de>
parents: 11345
diff changeset
    17
		EncodingFailedSignal LastString LastShiftTable'
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
    18
	poolDictionaries:''
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
    19
	category:'Collections-Text'
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    20
!
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    21
1849
9f35f5934ec6 added msdos-latin1 en/decoder (code = #msdos850)
Claus Gittinger <cg@exept.de>
parents: 1669
diff changeset
    22
!CharacterArray class methodsFor:'documentation'!
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    23
82
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    24
copyright
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    25
"
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    26
 COPYRIGHT (c) 1994 by Claus Gittinger
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
    27
	      All Rights Reserved
82
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    28
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    29
 This software is furnished under a license and may be used
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    30
 only in accordance with the terms of that license and with the
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    31
 inclusion of the above copyright notice.   This software may not
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    32
 be provided or otherwise made available to, or used by, any
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    33
 other person.  No title to or ownership of the software is
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    34
 hereby transferred.
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    35
"
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    36
!
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    37
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    38
documentation
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    39
"
255
2b2c5c0facab *** empty log message ***
claus
parents: 247
diff changeset
    40
    CharacterArray is a superclass for all kinds of Strings (i.e.
68
59faa75185ba *** empty log message ***
claus
parents: 64
diff changeset
    41
    (singleByte-)Strings, TwoByteStrings and whatever comes in the future.
154
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
    42
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
    43
    This class is abstract, meaning that there are no instances of it.
2537
9398b135cec4 comment
Claus Gittinger <cg@exept.de>
parents: 2520
diff changeset
    44
    All this class does is provide common protocol for concrete subclasses.
1290
15ba3221b89b documentation
Claus Gittinger <cg@exept.de>
parents: 1272
diff changeset
    45
15ba3221b89b documentation
Claus Gittinger <cg@exept.de>
parents: 1272
diff changeset
    46
    [author:]
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
    47
	Claus Gittinger
1290
15ba3221b89b documentation
Claus Gittinger <cg@exept.de>
parents: 1272
diff changeset
    48
15ba3221b89b documentation
Claus Gittinger <cg@exept.de>
parents: 1272
diff changeset
    49
    [see also:]
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
    50
	String TwoByteString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
    51
	StringCollection
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    52
"
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    53
! !
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    54
2728
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    55
!CharacterArray class methodsFor:'initialization'!
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    56
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    57
initialize
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
    58
    DecodingFailedSignal isNil ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
    59
	DecodingFailedSignal := DecodingError.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
    60
	DecodingFailedSignal notifierString:'error during decode'.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
    61
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
    62
	EncodingFailedSignal :=EncodingError.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
    63
	EncodingFailedSignal notifierString:'error during encode'.
5440
ba9207f592c9 only init once
Claus Gittinger <cg@exept.de>
parents: 5352
diff changeset
    64
    ]
2728
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    65
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    66
    "
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    67
     CharacterArray initialize
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    68
    "
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    69
2833
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
    70
    "Modified: 3.8.1997 / 18:15:59 / cg"
2728
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    71
! !
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    72
1849
9f35f5934ec6 added msdos-latin1 en/decoder (code = #msdos850)
Claus Gittinger <cg@exept.de>
parents: 1669
diff changeset
    73
!CharacterArray class methodsFor:'instance creation'!
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    74
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    75
basicNew
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    76
    "return a new empty string"
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    77
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    78
    ^ self basicNew:0
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    79
!
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    80
2734
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    81
fromBytes:aByteCollection
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    82
    "return an instance of the receiver class,
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    83
     taking untranslated bytes from the argument, aByteCollection.
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    84
     Only useful, when reading twoByteStrings from external sources."
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    85
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    86
    |mySize nBytes newString dstIdx|
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    87
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    88
    nBytes := aByteCollection size.
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    89
    mySize := self basicNew bitsPerCharacter.
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    90
    mySize == 16 ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
    91
	newString := self basicNew:(nBytes // 2).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
    92
	dstIdx := 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
    93
	aByteCollection pairWiseDo:[:hi :lo |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
    94
	    newString at:dstIdx put:(Character value:(hi bitShift:8)+lo).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
    95
	    dstIdx := dstIdx + 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
    96
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
    97
	^ newString.
2734
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    98
    ].
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    99
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   100
    ^ (self basicNew:nBytes) replaceFrom:1 with:aByteCollection
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   101
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   102
    "
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   103
     TwoByteString fromBytes:#[16r21 16r21]
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   104
    "
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   105
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   106
    "Modified: 30.6.1997 / 20:08:37 / cg"
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   107
!
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   108
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
   109
fromString:aString
af7aeb79b25e Initial revision
claus
parents:
diff changeset
   110
    "return a copy of the argument, aString"
af7aeb79b25e Initial revision
claus
parents:
diff changeset
   111
68
59faa75185ba *** empty log message ***
claus
parents: 64
diff changeset
   112
    ^ (self basicNew:(aString size)) replaceFrom:1 with:aString
59faa75185ba *** empty log message ***
claus
parents: 64
diff changeset
   113
59faa75185ba *** empty log message ***
claus
parents: 64
diff changeset
   114
    "TwoByteString fromString:'hello'"
581
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   115
!
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   116
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   117
fromStringCollection:aCollectionOfStrings
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   118
    "return new string formed by concatenating a copy of the argument, aString"
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   119
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   120
    ^ self fromStringCollection:aCollectionOfStrings separatedBy:''
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   121
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   122
    "
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   123
     String fromStringCollection:#('hello' 'world' 'how' 'about' 'this')
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   124
    "
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   125
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   126
    "Created: 20.11.1995 / 15:26:59 / cg"
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   127
!
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   128
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   129
fromStringCollection:aCollectionOfStrings separatedBy:aSeparatorString
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   130
    "return new string formed by concatenating a copy of the argument, aString"
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   131
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   132
    |newString first|
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   133
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   134
    newString := ''.
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   135
    first := true.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   136
    aCollectionOfStrings do:[:s |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   137
	first ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   138
	    newString := newString , aSeparatorString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   139
	] ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   140
	    first := false
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   141
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   142
	newString := newString , s
581
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   143
    ].
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   144
    ^ newString
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   145
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   146
    "
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   147
     String fromStringCollection:#('hello' 'world' 'how' 'about' 'this') separatedBy:' '
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   148
    "
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   149
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   150
    "Created: 20.11.1995 / 15:32:17 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   151
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   152
5757
2511dcddce73 utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5741
diff changeset
   153
fromUTF8Bytes:aByteCollection
5758
30e0cc2213ac utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5757
diff changeset
   154
    "return a new string which represents the characters as decoded
30e0cc2213ac utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5757
diff changeset
   155
     from the utf8 encoded bytes, aByteCollection.
30e0cc2213ac utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5757
diff changeset
   156
     Returns either a normal String, or a TwoByteString instance.
6810
a055eb19e9d3 caych invalid encodings
Claus Gittinger <cg@exept.de>
parents: 6809
diff changeset
   157
     Only useful, when reading twoByteStrings from external sources.
a055eb19e9d3 caych invalid encodings
Claus Gittinger <cg@exept.de>
parents: 6809
diff changeset
   158
     This only handles up-to 16bit characters"
5757
2511dcddce73 utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5741
diff changeset
   159
7876
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   160
    ^ self decodeFromUTF8:aByteCollection.
5757
2511dcddce73 utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5741
diff changeset
   161
2511dcddce73 utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5741
diff changeset
   162
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   163
     CharacterArray fromUTF8Bytes:#[ 16r41 16r42 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   164
     CharacterArray fromUTF8Bytes:#[ 16rC1 16r02 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   165
     CharacterArray fromUTF8Bytes:#[ 16rE0 16r81 16r02 ]
6810
a055eb19e9d3 caych invalid encodings
Claus Gittinger <cg@exept.de>
parents: 6809
diff changeset
   166
     CharacterArray fromUTF8Bytes:#[ 16rEF 16rBF 16rBF ]
a055eb19e9d3 caych invalid encodings
Claus Gittinger <cg@exept.de>
parents: 6809
diff changeset
   167
a055eb19e9d3 caych invalid encodings
Claus Gittinger <cg@exept.de>
parents: 6809
diff changeset
   168
   rfc2279 examples:
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   169
     CharacterArray fromUTF8Bytes:#[ 16r41 16rE2 16r89 16rA2 16rCE 16r91 16r2E ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   170
     CharacterArray fromUTF8Bytes:#[ 16rED 16r95 16r9C 16rEA 16rB5 16rAD 16rEC 16r96 16rB4 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   171
     CharacterArray fromUTF8Bytes:#[ 16rE6 16r97 16rA5 16rE6 16r9C 16rAC 16rE8 16rAA 16r9E ]
6810
a055eb19e9d3 caych invalid encodings
Claus Gittinger <cg@exept.de>
parents: 6809
diff changeset
   172
a055eb19e9d3 caych invalid encodings
Claus Gittinger <cg@exept.de>
parents: 6809
diff changeset
   173
   invalid:
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   174
     CharacterArray fromUTF8Bytes:#[ 16rC0 16r80 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   175
     CharacterArray fromUTF8Bytes:#[ 16rE0 16r80 16r80 ]
5757
2511dcddce73 utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5741
diff changeset
   176
    "
2511dcddce73 utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5741
diff changeset
   177
!
2511dcddce73 utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5741
diff changeset
   178
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   179
new
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   180
    "return a new empty string"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   181
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   182
    ^ self basicNew:0
9425
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   183
!
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   184
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   185
readSmalltalkStringFrom:aStreamOrString onError:exceptionBlock
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   186
    "read & return the next String from the (character-)stream aStream;
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   187
     skipping all whitespace first; return the value of exceptionBlock,
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   188
     if no string can be read. The sequence of characters as read from the
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   189
     stream must be one as stored via storeOn: or storeString."
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   190
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   191
    |str collected char|
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   192
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   193
    str := aStreamOrString readStream.
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   194
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   195
    "skip whiteSpace"
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   196
    str skipSeparators.
11320
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
   197
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
   198
    (str nextOrNil == $') ifTrue:[
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
   199
	collected := self writeStream.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
   200
	[str atEnd] whileFalse:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
   201
	    char := str next.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
   202
	    char == $' ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
   203
		"/ look for another quote
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
   204
		str peekOrNil ~~ $' ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
   205
		    "end of string reached"
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
   206
		    ^ collected contents.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
   207
		].
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
   208
		"eat doubled quote"
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
   209
		str next.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
   210
	    ].
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
   211
	    ((char ~~ Character return) or:[str peekOrNil ~~ Character lf]) ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
   212
		"compress CRLF to LF, but keep a single CR"
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
   213
		collected nextPut:char.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
   214
	    ].
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
   215
	].
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
   216
	"if we come here, we reached the end without finding a closing $'"
9425
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   217
    ].
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   218
    ^ exceptionBlock value
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   219
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   220
    "
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   221
     String readFrom:('''hello world''' readStream)
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   222
     String readFrom:('''hello '''' world''' readStream)
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   223
     String readFrom:('1 ''hello'' ' readStream)
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   224
     String readFrom:('1 ''hello'' ' readStream) onError:['foobar']
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   225
    "
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   226
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   227
    "Created: / 05-07-2006 / 16:41:04 / cg"
10045
bbd328940fb4 care for cr-lf when reading a smalltalk string
Claus Gittinger <cg@exept.de>
parents: 9845
diff changeset
   228
    "Modified: / 06-10-2006 / 14:05:32 / cg"
11243
4bf099f5bb56 CharacterArray class>>#writeStream - answer a CharacterWriteStrem
Stefan Vogel <sv@exept.de>
parents: 11229
diff changeset
   229
!
4bf099f5bb56 CharacterArray class>>#writeStream - answer a CharacterWriteStrem
Stefan Vogel <sv@exept.de>
parents: 11229
diff changeset
   230
13201
848ccc41fc90 added: #writeStreamClass
Claus Gittinger <cg@exept.de>
parents: 13170
diff changeset
   231
writeStreamClass
848ccc41fc90 added: #writeStreamClass
Claus Gittinger <cg@exept.de>
parents: 13170
diff changeset
   232
    "the class used by writeStream"
848ccc41fc90 added: #writeStreamClass
Claus Gittinger <cg@exept.de>
parents: 13170
diff changeset
   233
848ccc41fc90 added: #writeStreamClass
Claus Gittinger <cg@exept.de>
parents: 13170
diff changeset
   234
    ^ CharacterWriteStream
11243
4bf099f5bb56 CharacterArray class>>#writeStream - answer a CharacterWriteStrem
Stefan Vogel <sv@exept.de>
parents: 11229
diff changeset
   235
4bf099f5bb56 CharacterArray class>>#writeStream - answer a CharacterWriteStrem
Stefan Vogel <sv@exept.de>
parents: 11229
diff changeset
   236
    "
4bf099f5bb56 CharacterArray class>>#writeStream - answer a CharacterWriteStrem
Stefan Vogel <sv@exept.de>
parents: 11229
diff changeset
   237
     String writeStream
4bf099f5bb56 CharacterArray class>>#writeStream - answer a CharacterWriteStrem
Stefan Vogel <sv@exept.de>
parents: 11229
diff changeset
   238
    "
13201
848ccc41fc90 added: #writeStreamClass
Claus Gittinger <cg@exept.de>
parents: 13170
diff changeset
   239
848ccc41fc90 added: #writeStreamClass
Claus Gittinger <cg@exept.de>
parents: 13170
diff changeset
   240
    "Created: / 09-01-2011 / 10:37:57 / cg"
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
   241
! !
af7aeb79b25e Initial revision
claus
parents:
diff changeset
   242
9265
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   243
!CharacterArray class methodsFor:'Compatibility-VW'!
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   244
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   245
fromIntegerArray: anArray
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   246
    "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
   247
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   248
    | new |
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   249
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   250
    new := self new: anArray size.
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   251
    1 to: anArray size do:[:index |
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   252
	new at: index put: (anArray at: index) asCharacter
9265
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   253
    ].
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   254
    ^new
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   255
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   256
    "
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   257
     String fromIntegerArray: #[8 127]
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   258
    "
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   259
! !
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   260
2728
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   261
!CharacterArray class methodsFor:'Signal constants'!
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   262
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   263
decodingFailedSignal
2833
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   264
    "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
   265
     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
   266
     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
   267
     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
   268
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   269
    ^ DecodingFailedSignal
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   270
2833
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   271
    "Created: 28.6.1997 / 20:09:55 / cg"
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   272
    "Modified: 3.8.1997 / 18:16:47 / cg"
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   273
!
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
encodingFailedSignal
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   276
    "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
   277
     due to invalid characters contained in the source."
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   278
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   279
    ^ EncodingFailedSignal
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   280
2728
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   281
    "Modified: 28.6.1997 / 20:09:35 / cg"
2833
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   282
    "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
   283
! !
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   284
1849
9f35f5934ec6 added msdos-latin1 en/decoder (code = #msdos850)
Claus Gittinger <cg@exept.de>
parents: 1669
diff changeset
   285
!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
   286
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   287
lowSpaceCleanup
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   288
    "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
   289
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   290
    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
   291
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
     CharacterArray lowSpaceCleanup
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   294
    "
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
    "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
   297
    "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
   298
! !
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   299
7421
4e6c6edb90d9 category rename
Claus Gittinger <cg@exept.de>
parents: 7349
diff changeset
   300
!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
   301
7876
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   302
decodeFromUTF8:aStringOrByteCollection
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   303
    "return a string which represents the characters as decoded
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   304
     from the utf8 encoded bytes, aByteCollection.
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   305
     Returns either a normal String, or a TwoByteString instance.
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   306
     Only useful, when reading twoByteStrings from external sources.
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   307
     This only handles up-to 16bit characters."
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   308
8124
ca774158b317 code cleanup (removed old obsolete encoding stuff)
Claus Gittinger <cg@exept.de>
parents: 8102
diff changeset
   309
    ^ CharacterEncoderImplementations::ISO10646_to_UTF8 decodeString:aStringOrByteCollection
7876
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   310
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   311
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   312
     CharacterArray fromUTF8Bytes:#[ 16r41 16r42 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   313
     CharacterArray fromUTF8Bytes:#[ 16rC1 16r02 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   314
     CharacterArray fromUTF8Bytes:#[ 16rE0 16r81 16r02 ]
7876
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   315
     CharacterArray fromUTF8Bytes:#[ 16rEF 16rBF 16rBF ]
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   316
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   317
   rfc2279 examples:
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   318
     CharacterArray fromUTF8Bytes:#[ 16r41 16rE2 16r89 16rA2 16rCE 16r91 16r2E ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   319
     CharacterArray fromUTF8Bytes:#[ 16rED 16r95 16r9C 16rEA 16rB5 16rAD 16rEC 16r96 16rB4 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   320
     CharacterArray fromUTF8Bytes:#[ 16rE6 16r97 16rA5 16rE6 16r9C 16rAC 16rE8 16rAA 16r9E ]
7876
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   321
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   322
   invalid:
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   323
     CharacterArray fromUTF8Bytes:#[ 16rC0 16r80 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   324
     CharacterArray fromUTF8Bytes:#[ 16rE0 16r80 16r80 ]
7876
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   325
    "
443
Claus Gittinger <cg@exept.de>
parents: 428
diff changeset
   326
! !
Claus Gittinger <cg@exept.de>
parents: 428
diff changeset
   327
1849
9f35f5934ec6 added msdos-latin1 en/decoder (code = #msdos850)
Claus Gittinger <cg@exept.de>
parents: 1669
diff changeset
   328
!CharacterArray class methodsFor:'pattern matching'!
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
   329
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
   330
matchEscapeCharacter
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
   331
    "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
   332
     (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
   333
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
327
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   337
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
   338
    "helper for match; return true if the characters from start to stop in
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   339
     aString are matching the scan in matchScan from matchStart to matchStop.
328
claus
parents: 327
diff changeset
   340
     The matchScan is as created by asMatchScanArray.
327
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   341
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   342
     This algorithm is not at all the most efficient;
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   343
     for heavy duty pattern matching, an interface (primitive) to the regex
328
claus
parents: 327
diff changeset
   344
     pattern matching package should be added."
327
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   345
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   346
    |matchEntry
327
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   347
     mStart "{ Class: SmallInteger }"
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   348
     mStop  "{ Class: SmallInteger }"
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   349
     sStart "{ Class: SmallInteger }"
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   350
     sStop  "{ Class: SmallInteger }"
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   351
     mSize  "{ Class: SmallInteger }"
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   352
     sSize  "{ Class: SmallInteger }"
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   353
     index  "{ Class: SmallInteger }"
2561
205ee33decf9 removed unused var
Claus Gittinger <cg@exept.de>
parents: 2554
diff changeset
   354
     quickCheck matchLast nextMatchEntry
986
c3a9f590146d removed unused locals
Claus Gittinger <cg@exept.de>
parents: 915
diff changeset
   355
     checkChar included|
327
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   356
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   357
    mStart := matchStart.
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   358
    mStop := matchStop.
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   359
    sStart := start.
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   360
    sStop := stop.
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   361
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   362
    [true] whileTrue:[
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   363
"/ Transcript showCR:('match: ''' , (aString copyFrom:sStart to:sStop) ,
3537
916534e86f0c fixed match
Claus Gittinger <cg@exept.de>
parents: 3527
diff changeset
   364
"/                    ''' against:' , (matchScanArray copyFrom:mStart to:mStop) printString).
916534e86f0c fixed match
Claus Gittinger <cg@exept.de>
parents: 3527
diff changeset
   365
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   366
	mSize := mStop - mStart + 1.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   367
	sSize := sStop - sStart + 1.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   368
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   369
	"empty strings match"
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   370
	(mSize == 0) ifTrue:[^ (sSize == 0)].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   371
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   372
	matchEntry := matchScanArray at:mStart.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   373
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   374
	"/ the most common case first:
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   375
	(sSize ~~ 0
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   376
	and:[(checkChar := (aString at:sStart)) = matchEntry]) ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   377
	    "advance by one and continue"
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   378
	    mStart := mStart + 1.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   379
	    sStart := sStart + 1
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   380
	] ifFalse:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   381
	    (matchEntry == #any) ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   382
		"restString empty -> no match"
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   383
		(sSize == 0) ifTrue:[^ false].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   384
		"# matches single character"
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   385
		((sSize == 1) and:[mSize == 1]) ifTrue:[^ true].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   386
		"advance by one and continue"
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   387
		mStart := mStart + 1.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   388
		sStart := sStart + 1
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   389
	    ] ifFalse:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   390
		(matchEntry == #anyString) ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   391
		    "* alone matches anything"
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   392
		    (mSize == 1) ifTrue:[^ true].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   393
		    "restString empty & matchString not empty -> no match"
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   394
		    (sSize == 0) ifTrue:[^ false].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   395
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   396
		    "
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   397
		     try to avoid some of the recursion by checking last
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   398
		     character and continue with shortened strings if possible
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   399
		    "
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   400
		    quickCheck := false.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   401
		    (mStop >= mStart) ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   402
			matchLast := matchScanArray at:mStop.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   403
			(matchLast ~~ #anyString) ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   404
			    (matchLast == #any) ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   405
				quickCheck := true
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   406
			    ] ifFalse:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   407
				matchLast == (aString at:sStop) ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   408
				    quickCheck := true
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   409
				] ifFalse:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   410
				    matchLast isString ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   411
					quickCheck := matchLast includes:(aString at:sStop)
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   412
				    ]
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   413
				]
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   414
			    ]
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   415
			]
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   416
		    ].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   417
		    quickCheck ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   418
			"
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   419
			 quickCheck ok, advance from the right
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   420
			"
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   421
			mStop := mStop - 1.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   422
			sStop := sStop - 1
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   423
		    ] ifFalse:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   424
			"/ no quick check;
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   425
			"/ look for the next character(s)
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   426
			"/ and try matching there
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   427
			"/ (to avoid recursion)
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   428
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   429
			mStart < mStop ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   430
			    nextMatchEntry := matchScanArray at:mStart+1.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   431
			    nextMatchEntry isCharacter ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   432
				sStart <= sStop ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   433
				    [true] whileTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   434
					ignoreCase ifFalse:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   435
					    index := aString indexOf:nextMatchEntry startingAt:sStart
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   436
					] ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   437
					    index := aString findFirst:[:c | c asLowercase = nextMatchEntry asLowercase]
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   438
							   startingAt:sStart.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   439
					].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   440
					(index == 0 or:[index > sStop]) ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   441
					    ^ false
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   442
					].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   443
					(self matchScan:matchScanArray
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   444
					      from:(mStart + 1)
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   445
					      to:mStop
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   446
					      with:aString
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   447
					      from:index
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   448
					      to:sStop
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   449
					      ignoreCase:ignoreCase
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   450
					) ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   451
					    ^ true
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   452
					].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   453
					sStart := index + 1.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   454
				    ]
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   455
				]
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   456
			    ]
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   457
			].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   458
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   459
			"
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   460
			 no quick check possible;
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   461
			 loop over all possible substrings
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   462
			"
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   463
			index := sStart.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   464
			[index <= sStop] whileTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   465
			    (self matchScan:matchScanArray
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   466
				  from:(mStart + 1)
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   467
				  to:mStop
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   468
				  with:aString
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   469
				  from:index
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   470
				  to:sStop
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   471
				  ignoreCase:ignoreCase
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   472
			    ) ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   473
				^ true
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   474
			    ].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   475
			    index := index + 1
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   476
			].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   477
			^ false
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   478
		    ].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   479
		] ifFalse:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   480
		    (matchEntry isString) ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   481
			"testString empty -> no match"
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   482
			(sSize == 0) ifTrue:[^ false].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   483
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   484
			included := false.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   485
			"/ checkChar := aString at:sStart.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   486
			included := matchEntry includes:checkChar.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   487
			included ifFalse:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   488
			    ignoreCase ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   489
				checkChar isUppercase ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   490
				    included := matchEntry includes:checkChar asLowercase.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   491
				] ifFalse:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   492
				    included := matchEntry includes:checkChar asUppercase.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   493
				]
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   494
			    ].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   495
			].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   496
			mStart := mStart + 1.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   497
			mSize := mSize - 1.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   498
			included ifFalse:[^ false].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   499
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   500
			((sSize == 1) and:[mSize == 0]) ifTrue:[^ true].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   501
		    ] ifFalse:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   502
			"/ must be single character
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   503
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   504
			"testString empty ?"
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   505
			(sSize == 0) ifTrue:[^ false].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   506
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   507
			"first characters equal ?"
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   508
			"/ checkChar := aString at:sStart.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   509
			ignoreCase ifFalse:[^ false].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   510
			(checkChar asUppercase ~= matchEntry asUppercase) ifTrue:[^ false].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   511
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   512
			"advance and continue"
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   513
			mStart := mStart + 1.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   514
		    ].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   515
		    "cut off 1st char and continue"
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   516
		    sStart := sStart + 1
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   517
		]
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   518
	    ]
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   519
	]
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   520
    ].
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   521
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   522
    "
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   523
     |scanArray s|
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   524
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   525
     scanArray := self matchScanArrayFrom:'*hello'.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   526
     s := 'foo bar hello world'.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   527
     CharacterArray
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   528
	 matchScan:scanArray
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   529
	 from:1
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   530
	 to:scanArray size
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   531
	 with:s
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   532
	 from:1
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   533
	 to:s size
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   534
	 ignoreCase:false
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   535
    "
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   536
    "
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   537
     |scanArray s|
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   538
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   539
     scanArray := self matchScanArrayFrom:'*hello*'.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   540
     s := 'foo bar hello world'.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   541
     CharacterArray
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   542
	 matchScan:scanArray
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   543
	 from:1
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   544
	 to:scanArray size
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   545
	 with:s
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   546
	 from:1
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   547
	 to:s size
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   548
	 ignoreCase:false
13520
52597f7f6ff8 changed:
Claus Gittinger <cg@exept.de>
parents: 13511
diff changeset
   549
    "
52597f7f6ff8 changed:
Claus Gittinger <cg@exept.de>
parents: 13511
diff changeset
   550
52597f7f6ff8 changed:
Claus Gittinger <cg@exept.de>
parents: 13511
diff changeset
   551
    "Modified: / 24-07-2011 / 07:17:03 / cg"
52597f7f6ff8 changed:
Claus Gittinger <cg@exept.de>
parents: 13511
diff changeset
   552
    "Modified (comment): / 24-07-2011 / 08:55:14 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   553
!
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
matchScanArrayFrom:aString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   556
    "scan a pattern string and decompose it into a scanArray.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   557
     This is processed faster (especially with character ranges), and
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   558
     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
   559
9282
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   560
    ^ self matchScanArrayFrom:aString escapeCharacter:(self matchEscapeCharacter)
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   561
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
     String matchScanArrayFrom:'*ute*'
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:'*uter'
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:'[cC]#mpute[rR]'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   568
     String matchScanArrayFrom:'[abcd]*'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   569
     String matchScanArrayFrom:'[a-k]*'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   570
     String matchScanArrayFrom:'*some*compl*ern*'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   571
     String matchScanArrayFrom:'[a-'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   572
     String matchScanArrayFrom:'[a-zA-Z]'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   573
     String matchScanArrayFrom:'[a-z01234A-Z]'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   574
    "
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
    "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
   577
!
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
matchScanArrayFrom:aString escapeCharacter:escape
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   580
    "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
   581
     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
   582
     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
   583
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   584
    |coll
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   585
     idx "{ Class: SmallInteger }"
9282
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   586
     end c1 c2 matchSet previous|
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
   587
5487
cb4c5ae75c63 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5469
diff changeset
   588
    previous := nil.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   589
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   590
    coll := OrderedCollection new.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   591
    idx := 1. end := aString size.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   592
    [idx <= end] whileTrue:[
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   593
	|char this|
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   594
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   595
	char := aString at:idx.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   596
	char == $* ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   597
	    previous ~~ #anyString ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   598
		this := #anyString
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   599
	    ]
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   600
	] ifFalse:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   601
	    char == $# ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   602
		previous ~~ #anyString ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   603
		    this := #any
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   604
		]
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   605
	    ] ifFalse:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   606
		char == $[ ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   607
		    matchSet := IdentitySet new.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   608
		    idx := idx + 1.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   609
		    idx > end ifTrue:[^ nil].
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   610
		    char := aString at:idx.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   611
		    c1 := nil.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   612
		    [char ~~ $]] whileTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   613
			((char == $-) and:[c1 notNil]) ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   614
			    idx := idx + 1.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   615
			    idx > end ifTrue:[^ nil].
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   616
			    c2 := aString at:idx.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   617
			    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
   618
			    c1 := nil.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   619
			    idx := idx + 1.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   620
			] ifFalse:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   621
			    (char ~~ $]) ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   622
				matchSet add:char.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   623
				c1 := char.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   624
				idx := idx + 1
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   625
			    ]
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
			idx > end ifTrue:[^ nil].
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   628
			char := aString at:idx
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   629
		    ].
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   630
		    this := matchSet asString
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   631
		] ifFalse:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   632
		    char == escape ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   633
			idx := idx + 1.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   634
			idx > end ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   635
			    "/ mhmh - what should we do here ?
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   636
			    this := char
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   637
			] ifFalse:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   638
			    this := aString at:idx.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   639
			]
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   640
		    ] ifFalse:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   641
			this := char
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   642
		    ]
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   643
		]
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   644
	    ]
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
	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
   647
	idx := idx + 1
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   648
    ].
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
    ^ coll asArray
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   651
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   652
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   653
     String matchScanArrayFrom:'*ute*'
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:'*uter'
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:'[cC]#mpute[rR]'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   658
     String matchScanArrayFrom:'[abcd]*'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   659
     String matchScanArrayFrom:'[a-k]*'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   660
     String matchScanArrayFrom:'*some*compl*ern*'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   661
     String matchScanArrayFrom:'[a-'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   662
     String matchScanArrayFrom:'[a-zA-Z]'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   663
     String matchScanArrayFrom:'[a-z01234A-Z]'
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   664
    "
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   665
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   666
    "Modified: 2.4.1997 / 16:20:29 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   667
! !
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
!CharacterArray class methodsFor:'queries'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   670
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   671
isAbstract
11229
4fa83d5e806d comment
Claus Gittinger <cg@exept.de>
parents: 11179
diff changeset
   672
    "Return if this class is an abstract class.
4fa83d5e806d comment
Claus Gittinger <cg@exept.de>
parents: 11179
diff changeset
   673
     True is returned for CharacterArray here; false for subclasses.
4fa83d5e806d comment
Claus Gittinger <cg@exept.de>
parents: 11179
diff changeset
   674
     Abstract subclasses must redefine again."
4fa83d5e806d comment
Claus Gittinger <cg@exept.de>
parents: 11179
diff changeset
   675
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   676
    ^ self == CharacterArray
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   677
! !
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
!CharacterArray methodsFor:'Compatibility-ANSI'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   680
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   681
addLineDelimiters
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   682
    "Ansi compatibility - same as withCRs"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   683
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   684
    ^ self withCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   685
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   686
    "Modified: / 13.11.2001 / 19:16:25 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   687
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   688
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   689
!CharacterArray methodsFor:'Compatibility-Dolphin'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   690
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   691
argumentCount
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   692
    "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
   693
     as selector would take."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   694
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   695
    ^  self numArgs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   696
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   697
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   698
copyExpanding:expandTable
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   699
    "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
   700
     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
   701
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   702
    |ds|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   703
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   704
    ds := WriteStream on:(self species new).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   705
    self do:[:eachChar |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   706
	|repl|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   707
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   708
	repl := expandTable at:eachChar ifAbsent:nil.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   709
	repl isNil ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   710
	    ds nextPut:eachChar
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   711
	] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   712
	    repl size == 0 ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   713
		ds nextPut:repl
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   714
	    ] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   715
		ds nextPutAll:repl
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   716
	    ]
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
    ].
6870
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   719
    ^ ds contents.
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   720
!
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
formatWith:aString
11955
1230c6953d49 comments
Claus Gittinger <cg@exept.de>
parents: 11919
diff changeset
   723
    "Compatibility method - do not use in new code.
1230c6953d49 comments
Claus Gittinger <cg@exept.de>
parents: 11919
diff changeset
   724
     same as #bindWith: for dolphin compatibility"
6870
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   725
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   726
    ^ self bindWith:aString
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   727
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   728
    "
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   729
     'hello%1world' formatWith:'123'
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   730
    "
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   731
!
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
formatWith:arg1 with:arg2
11955
1230c6953d49 comments
Claus Gittinger <cg@exept.de>
parents: 11919
diff changeset
   734
    "Compatibility method - do not use in new code.
1230c6953d49 comments
Claus Gittinger <cg@exept.de>
parents: 11919
diff changeset
   735
     same as #bindWith: for dolphin compatibility"
6870
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   736
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   737
    ^ self bindWith:arg1 with:arg2
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   738
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   739
    "
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   740
     'hello%1 %2world' formatWith:'123' with:234
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   741
    "
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   742
!
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
formatWith:arg1 with:arg2 with:arg3
11955
1230c6953d49 comments
Claus Gittinger <cg@exept.de>
parents: 11919
diff changeset
   745
    "Compatibility method - do not use in new code.
1230c6953d49 comments
Claus Gittinger <cg@exept.de>
parents: 11919
diff changeset
   746
     same as #bindWith: for dolphin compatibility"
6870
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   747
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   748
    ^ self bindWith:arg1 with:arg2 with:arg3
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   749
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   750
    "
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   751
     'hello%1 %2 %3world' formatWith:'123' with:234 with:345
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   752
    "
6391
ff9f6df9ec4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6228
diff changeset
   753
! !
ff9f6df9ec4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6228
diff changeset
   754
7261
f35fc9cee675 method category rename
Claus Gittinger <cg@exept.de>
parents: 7247
diff changeset
   755
!CharacterArray methodsFor:'Compatibility-ST/V'!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   756
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   757
byteAt:index put:aByte
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   758
    "store a byte at given index.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   759
     This is an ST/V compatibility method."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   760
1333
d3fdca956f0d allow storing of 0-bytes (be careful with printing then ...)
Claus Gittinger <cg@exept.de>
parents: 1312
diff changeset
   761
"/    (aByte == 0) ifTrue:[
d3fdca956f0d allow storing of 0-bytes (be careful with printing then ...)
Claus Gittinger <cg@exept.de>
parents: 1312
diff changeset
   762
"/        "store a space instead"
d3fdca956f0d allow storing of 0-bytes (be careful with printing then ...)
Claus Gittinger <cg@exept.de>
parents: 1312
diff changeset
   763
"/        ^ 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
   764
"/    ].
11754
5132248cfd6e common definition of #byteAt:put between CharacterArray and Symbol
Stefan Vogel <sv@exept.de>
parents: 11632
diff changeset
   765
    ^ self basicAt:index put:(Character value:aByte)
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   766
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
     'hello' copy at:1 put:$H asciiValue; yourself
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   769
     'hello' copy byteAt:1 put:72; yourself
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   770
     'hello' copy byteAt:1 put:0; yourself
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   771
    "
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
    "Modified: 6.5.1996 / 10:35:26 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   774
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   775
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   776
replChar:oldChar with:newChar
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   777
    "return a copy of the receiver, with all oldChars replaced
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   778
     by newChar.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   779
     This is an ST/V compatibility method."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   780
3656
347ea0413b68 use #copyReplaceAll:with:
Claus Gittinger <cg@exept.de>
parents: 3630
diff changeset
   781
    ^ self copyReplaceAll:oldChar with:newChar
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   782
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   783
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   784
     '12345678901234567890' replChar:$0 with:$*
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   785
    "
3656
347ea0413b68 use #copyReplaceAll:with:
Claus Gittinger <cg@exept.de>
parents: 3630
diff changeset
   786
347ea0413b68 use #copyReplaceAll:with:
Claus Gittinger <cg@exept.de>
parents: 3630
diff changeset
   787
    "Modified: / 18.7.1998 / 22:52:57 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   788
!
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
replChar:oldChar withString:newString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   791
    "return a copy of the receiver, with all oldChars replaced
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   792
     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
   793
     This is an ST/V compatibility method."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   794
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   795
    |tmpStream|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   796
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   797
    tmpStream := WriteStream on:(self class new).
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   798
    self do:[:element |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   799
	element = oldChar ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   800
	    tmpStream nextPutAll:newString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   801
	] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   802
	    tmpStream nextPut:element
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   803
	].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   804
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   805
    ^ tmpStream contents
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   806
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   807
   "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   808
     '12345678901234567890' replChar:$0 withString:'foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   809
     'a string with spaces' replChar:$  withString:' foo '
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   810
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   811
!
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
replString:subString withString:newString
4244
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   814
    "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
   815
     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
   816
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
   817
    ^ self copyReplaceString:subString withString:newString
4244
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   818
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   819
   "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   820
     '12345678901234567890' replString:'123' withString:'OneTwoThree'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   821
     '12345678901234567890' replString:'123' withString:'*'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   822
     '12345678901234567890' replString:'234' withString:'foo'
4244
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   823
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   824
     ('a string with spaces' replChar:$  withString:' foo ')
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   825
	replString:'foo' withString:'bar'
4244
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   826
    "
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   827
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
   828
    "Modified: / 12-05-2004 / 12:00:27 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   829
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   830
9275
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   831
subString:start to:end
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   832
    ^ self copyFrom:start to:end
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   833
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
     '12345678901234567890' subString:3 to:8
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   836
    "
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
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   839
trimBlanks
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   840
    "return a copy of the receiver without leading
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   841
     and trailing spaces.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   842
     This is an ST/V compatibility method."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   843
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   844
    ^ self withoutSpaces
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   845
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
     '    spaces at beginning' trimBlanks
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   848
     'spaces at end    ' trimBlanks
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   849
     '    spaces at beginning and end     ' trimBlanks
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   850
     'no spaces' trimBlanks
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   851
    "
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
!CharacterArray methodsFor:'Compatibility-Squeak'!
4409
86e049b21f8d added #includesSubstring:caseSensitive:
Claus Gittinger <cg@exept.de>
parents: 4389
diff changeset
   855
6148
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   856
asDate
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   857
    "Many allowed forms, see Date.readFrom:"
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   858
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   859
    ^ Date readFrom: (ReadStream on: self)
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   860
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   861
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   862
     '30 Apr 1999' asDate dayName capitalized
6148
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   863
    "
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   864
!
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   865
8971
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
   866
asUrl
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
   867
    ^ self asURL
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
   868
!
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
   869
10840
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   870
asWideString
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   871
    ^ self asTwoByteString
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   872
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   873
    "
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   874
     'abc' asWideString
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
4989
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   878
capitalized
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   879
    ^ self asUppercaseFirst
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   880
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   881
    "
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   882
     'hello' capitalized
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   883
    "
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   884
!
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   885
10841
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   886
caseInsensitiveLessOrEqual:aString
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   887
    ^ (self compareCaselessWith:aString) <= 0
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   888
!
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   889
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   890
caseSensitiveLessOrEqual:aString
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   891
    ^ self <= aString
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   892
!
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
charactersExactlyMatching:aString
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   895
    |idx nMax|
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   896
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   897
    nMax :=(self size) min:(aString size).
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   898
    idx := 1.
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   899
    [idx <= nMax] whileTrue:[
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
   900
	(self at:idx) = (aString at:idx) ifFalse:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
   901
	    ^ idx - 1
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
   902
	].
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
   903
	idx := idx + 1.
10841
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   904
    ].
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   905
    ^ nMax
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   906
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   907
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
   908
     'abc' charactersExactlyMatching:'abc'
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
   909
     'abc' charactersExactlyMatching:'abcd'
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
   910
     'abcd' charactersExactlyMatching:'abc'
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
   911
     'abc' charactersExactlyMatching:'abd'
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
   912
     'abc' charactersExactlyMatching:'xxx'
10841
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
!
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   915
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   916
endsWithDigit
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   917
    "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
   918
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   919
    ^ self size > 0 and: [self last isDigit]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   920
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   921
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   922
findDelimiters:delimiters startingAt:start
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   923
    "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
   924
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   925
    |idx|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   926
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   927
    idx := self indexOfAny:delimiters startingAt:start.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   928
    idx == 0 ifTrue:[^ self size + 1].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   929
    ^ idx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   930
"/start to: self size do: [:i |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   931
"/        |char|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   932
"/
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   933
"/        char := self at: i.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   934
"/        delimiters do: [:delim | delim = char ifTrue: [^ i]]
8971
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
   935
"/    ].
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
   936
"/    ^ self size + 1
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
   937
!
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
   938
13624
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
   939
findTokens:delimiterOrDelimiters
7270
37248a67718a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7265
diff changeset
   940
    "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
   941
13624
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
   942
    delimiterOrDelimiters size == 0 ifTrue:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   943
	^ self asCollectionOfSubstringsSeparatedBy:delimiterOrDelimiters
13624
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
   944
    ] ifFalse:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
   945
	^ self asCollectionOfSubstringsSeparatedByAny:delimiterOrDelimiters
13624
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
   946
    ].
7270
37248a67718a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7265
diff changeset
   947
37248a67718a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7265
diff changeset
   948
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   949
     'a|b#c||e' findTokens:#($# $|)
13624
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
   950
     'a|b#c||e' findTokens:$|
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
   951
    "
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
   952
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
   953
    "Modified: / 04-09-2011 / 20:31:21 / cg"
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
   954
    "Modified (comment): / 05-09-2011 / 04:25:28 / cg"
4981
2ee8cd2c4c8e squeak compatibility
ps
parents: 4974
diff changeset
   955
!
2ee8cd2c4c8e squeak compatibility
ps
parents: 4974
diff changeset
   956
4974
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
   957
includesSubString:aString
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
   958
    "return true, if a substring is contained in the receiver.
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
   959
     The compare is case sensitive."
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
   960
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
   961
    ^ self includesString:aString
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
   962
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
   963
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   964
     'hello world' includesSubString:'Hel'
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   965
     'hello world' includesSubString:'hel'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   966
     'hello world' includesSubString:'llo'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   967
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   968
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   969
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   970
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   971
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   972
11178
668d5d9a4d5d added #includesSubString:caseSensitive:
sr
parents: 11062
diff changeset
   973
includesSubString:aString caseSensitive:caseSensitive
11179
178086a92325 *** empty log message ***
sr
parents: 11178
diff changeset
   974
    ^ self includesSubstring:aString caseSensitive:caseSensitive
11178
668d5d9a4d5d added #includesSubString:caseSensitive:
sr
parents: 11062
diff changeset
   975
!
668d5d9a4d5d added #includesSubString:caseSensitive:
sr
parents: 11062
diff changeset
   976
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   977
includesSubstring:aString caseSensitive:caseSensitive
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
   978
    "return true, if a substring is contained in the receiver.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   979
     The argument, caseSensitive controls if case is ignored in the compare."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   980
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   981
    "/ for now,  a q&d hack ...
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   982
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   983
    caseSensitive ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   984
	^ self asLowercase includesString:aString asLowercase
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   985
    ].
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
   986
    ^ self includesString:aString
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
   987
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
   988
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   989
     'hello world' includesSubstring:'Hel' caseSensitive:true
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   990
     'hello world' includesSubstring:'Hel' caseSensitive:false
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   991
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   992
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   993
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   994
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   995
!
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
   996
6979
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
   997
isAllDigits
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
   998
    "Answer whether the receiver's characters are all digits"
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
   999
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1000
    ^ self conform:[:eachChar | eachChar isDigit]
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1001
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1002
    "
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1003
     'hello world' isAllDigits
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1004
     '12344' isAllDigits
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1005
    "
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1006
!
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1007
13633
16b76699cd48 added: #isWideString
Claus Gittinger <cg@exept.de>
parents: 13624
diff changeset
  1008
isWideString
16b76699cd48 added: #isWideString
Claus Gittinger <cg@exept.de>
parents: 13624
diff changeset
  1009
    ^ self bitsPerCharacter > 8
16b76699cd48 added: #isWideString
Claus Gittinger <cg@exept.de>
parents: 13624
diff changeset
  1010
16b76699cd48 added: #isWideString
Claus Gittinger <cg@exept.de>
parents: 13624
diff changeset
  1011
    "Created: / 05-09-2011 / 23:13:16 / cg"
16b76699cd48 added: #isWideString
Claus Gittinger <cg@exept.de>
parents: 13624
diff changeset
  1012
!
16b76699cd48 added: #isWideString
Claus Gittinger <cg@exept.de>
parents: 13624
diff changeset
  1013
4890
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1014
lastSpacePosition
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1015
    ^ self lastIndexOfSeparator
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1016
!
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1017
7022
0c3c73f83b7f padded:to:with: - for squeak
penk
parents: 7020
diff changeset
  1018
padded:leftOrRight to:paddedSize with:padCharacter
0c3c73f83b7f padded:to:with: - for squeak
penk
parents: 7020
diff changeset
  1019
    leftOrRight == #left ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1020
	^ self leftPaddedTo:paddedSize with:padCharacter
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1021
    ].
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1022
    ^ self paddedTo:paddedSize with:padCharacter
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1023
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1024
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1025
     'hello' padded:#right to:10 with:$.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1026
     'hello' padded:#left to:10 with:$.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1027
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1028
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1029
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1030
skipDelimiters:delimiters startingAt:start
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1031
    "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
  1032
     that does NOT match one of the delimiters.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1033
     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
  1034
     Assumes the delimiters to be a non-empty string."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1035
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1036
    start to:self size do:[:i |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1037
	delimiters detect:[:delim | delim = (self at:i) ] ifNone:[ ^ i ]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1038
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1039
    ^ self size + 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1040
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1041
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1042
     '123***7890' skipDelimiters:'*' startingAt:4
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1043
     '123***7890' skipDelimiters:'*' startingAt:3
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1044
     '123***7890' skipDelimiters:'*' startingAt:10
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1045
     '123*******' skipDelimiters:'*' startingAt:10
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1046
    "
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1047
!
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1048
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1049
substrings
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1050
    ^ self asCollectionOfWords
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1051
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1052
    "
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1053
     'foo bar baz' substrings
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1054
    "
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1055
!
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1056
12665
b027fc5aec4e added: #substringsSeparatedBy:
Claus Gittinger <cg@exept.de>
parents: 12664
diff changeset
  1057
substringsSeparatedBy:separatorCharacter
b027fc5aec4e added: #substringsSeparatedBy:
Claus Gittinger <cg@exept.de>
parents: 12664
diff changeset
  1058
    ^ self asCollectionOfSubstringsSeparatedBy:separatorCharacter
b027fc5aec4e added: #substringsSeparatedBy:
Claus Gittinger <cg@exept.de>
parents: 12664
diff changeset
  1059
b027fc5aec4e added: #substringsSeparatedBy:
Claus Gittinger <cg@exept.de>
parents: 12664
diff changeset
  1060
    "
b027fc5aec4e added: #substringsSeparatedBy:
Claus Gittinger <cg@exept.de>
parents: 12664
diff changeset
  1061
     'foo bar, baz' substringsSeparatedBy:$,
b027fc5aec4e added: #substringsSeparatedBy:
Claus Gittinger <cg@exept.de>
parents: 12664
diff changeset
  1062
    "
b027fc5aec4e added: #substringsSeparatedBy:
Claus Gittinger <cg@exept.de>
parents: 12664
diff changeset
  1063
!
b027fc5aec4e added: #substringsSeparatedBy:
Claus Gittinger <cg@exept.de>
parents: 12664
diff changeset
  1064
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1065
truncateTo:smallSize
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1066
    "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
  1067
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1068
    self size <= smallSize ifTrue:[^ self].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1069
    ^ self copyFrom: 1 to: smallSize
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1070
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1071
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1072
     'hello world' truncateTo:5
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1073
     'hello' truncateTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1074
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1075
     'hello world' copyTo:5
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1076
     'hello' copyTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1077
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1078
!
5795
d67a8ff4d98e added #truncateTo:
Claus Gittinger <cg@exept.de>
parents: 5794
diff changeset
  1079
4890
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1080
withBlanksTrimmed
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1081
    "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
  1082
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1083
    ^ self withoutSpaces
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1084
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1085
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1086
     '  hello    world    ' withBlanksTrimmed
4890
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1087
    "
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1088
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1089
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1090
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1091
!
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1092
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1093
withNoLineLongerThan: aNumber
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1094
    "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
  1095
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1096
    | listOfLines currentLast currentStart resultString putativeLast putativeLine crPosition |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1097
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1098
    aNumber isNumber not | (aNumber < 1) ifTrue: [self error: 'too narrow'].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1099
    listOfLines _ OrderedCollection new.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1100
    currentLast _ 0.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1101
    [currentLast < self size] whileTrue:
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1102
	    [currentStart _ currentLast + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1103
	    putativeLast _ (currentStart + aNumber - 1) min: self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1104
	    putativeLine _ self copyFrom: currentStart to: putativeLast.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1105
	    (crPosition _ putativeLine indexOf: Character cr) > 0 ifTrue:
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1106
		    [putativeLast _ currentStart + crPosition - 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1107
		    putativeLine _ self copyFrom: currentStart to: putativeLast].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1108
	    currentLast _ putativeLast == self size
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1109
		    ifTrue:
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1110
			    [putativeLast]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1111
		    ifFalse:
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1112
			    [currentStart + putativeLine lastSpacePosition - 1].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1113
	    currentLast <= currentStart ifTrue:
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1114
		    ["line has NO spaces; baleout!!"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1115
		    currentLast _ putativeLast].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1116
	    listOfLines add: (self copyFrom: currentStart to: currentLast) withBlanksTrimmed].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1117
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1118
    listOfLines size > 0 ifFalse: [^ ''].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1119
    resultString _ listOfLines first.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1120
    2 to: listOfLines size do:
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1121
	    [:i | resultString _ resultString, Character cr asString, (listOfLines at: i)].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1122
    ^ resultString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1123
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1124
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1125
     #(5 7 20) collect:
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1126
	[:i | 'Fred the bear went down to the brook to read his book in silence' withNoLineLongerThan: i]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1127
    "
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1128
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1129
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1130
10883
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1131
!
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1132
12343
0a93eee37d65 added: #withSqueakLineEndings
Claus Gittinger <cg@exept.de>
parents: 12330
diff changeset
  1133
withSqueakLineEndings
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1134
    "assume the string is textual, and that CR, LF, and CRLF are all
12343
0a93eee37d65 added: #withSqueakLineEndings
Claus Gittinger <cg@exept.de>
parents: 12330
diff changeset
  1135
    valid line endings.  Replace each occurence with a single CR"
0a93eee37d65 added: #withSqueakLineEndings
Claus Gittinger <cg@exept.de>
parents: 12330
diff changeset
  1136
0a93eee37d65 added: #withSqueakLineEndings
Claus Gittinger <cg@exept.de>
parents: 12330
diff changeset
  1137
    ^ self asStringCollection asStringWith:Character cr.
0a93eee37d65 added: #withSqueakLineEndings
Claus Gittinger <cg@exept.de>
parents: 12330
diff changeset
  1138
!
0a93eee37d65 added: #withSqueakLineEndings
Claus Gittinger <cg@exept.de>
parents: 12330
diff changeset
  1139
12188
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1140
withoutLeading: char
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1141
    "return a copy of myself without leading a char.
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1142
     Returns an empty string, if the receiver consist only of a char."
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1143
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1144
    ^ self withoutLeadingForWhich:[:ch | ch = char]
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1145
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1146
    "
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1147
     '****foo****' withoutLeading: $*
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1148
     'foo****'     withoutLeading: $*
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1149
     '*'           withoutLeading: $*
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1150
     ''            withoutLeading: $*
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1151
     '****foo'     withoutLeading: $*
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1152
     '*******'     withoutLeading: $*
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1153
     'foo'         withoutLeading: $*
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1154
     'f***o***o'   withoutLeading: $*
12188
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1155
     ('**' , Character tab asString , '*foo***') withoutLeading: $* inspect
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1156
    "
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1157
!
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1158
11565
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1159
withoutTrailing:char
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1160
    "return a copy of myself without trailing char.
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1161
     Returns an empty string, if the receiver consist only of char."
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1162
12188
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1163
    ^ self withoutTrailingForWhich:[:ch | ch = char]
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1164
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1165
    "
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1166
     '    foo....' withoutTrailing:$.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1167
     'foo....'     withoutTrailing:$.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1168
     '    foo'     withoutTrailing:$.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1169
     '.......'     withoutTrailing:$.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1170
     'foo'         withoutTrailing:$.
11565
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1171
    "
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1172
!
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1173
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1174
withoutTrailingBlanks
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1175
    "return a copy of myself without trailing spaces.
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1176
     Notice: this does NOT remove tabs, newline or any other whitespace.
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1177
     Returns an empty string, if the receiver consist only of spaces."
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1178
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1179
    ^ self withoutTrailing:Character space
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1180
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1181
    "
10883
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1182
     '    foo    ' withoutTrailingBlanks
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1183
     'foo    '     withoutTrailingBlanks
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1184
     '    foo'     withoutTrailingBlanks
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1185
     '       '     withoutTrailingBlanks
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1186
     'foo'         withoutTrailingBlanks
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1187
     ('  ' , Character tab asString , ' foo   ') withoutTrailingBlanks inspect
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1188
     ('   foo' , Character tab asString) withoutTrailingBlanks inspect
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1189
    "
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1190
! !
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1191
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1192
!CharacterArray methodsFor:'Compatibility-V''Age'!
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1193
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1194
addLineDelimiter
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1195
    "replace all '\'-characters by line delimiter (cr) - characters.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1196
     This has been added for VisualAge compatibility."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1197
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1198
    ^ self withCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1199
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1200
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1201
bindWith:aString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1202
    "return a copy of the receiver, where a '%1' escape is
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1203
     replaced by aString.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1204
     This has been added for VisualAge compatibility."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1205
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1206
    ^ self expandPlaceholdersWith:(Array with:aString)
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
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1209
     'do you like %1 ?' bindWith:'smalltalk'
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
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1212
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1213
bindWith:string1 with:string2
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1214
    "return a copy of the receiver, where a '%1' escape is
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1215
     replaced by string1 and '%2' is replaced by string2.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1216
     This has been added for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1217
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1218
    ^ self expandPlaceholdersWith:(Array with:string1 with:string2)
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1219
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1220
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1221
     'do you prefer %1 or rather %2 ?'
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1222
	bindWith:'smalltalk' with:'c++'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1223
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1224
!
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1225
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1226
bindWith:str1 with:str2 with:str3
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1227
    "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
  1228
     are replaced by str1, str2 and str3 respectively.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1229
     This has been added for VisualAge compatibility."
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
    ^ self expandPlaceholdersWith:(Array with:str1 with:str2 with:str3)
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1232
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1233
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1234
     'do you prefer %1 or rather %2 (not talking about %3) ?'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1235
	bindWith:'smalltalk' with:'c++' with:'c'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1236
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1237
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1238
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1239
bindWith:str1 with:str2 with:str3 with:str4
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1240
    "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
  1241
     are replaced by str1, str2, str3 and str4 respectively.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1242
     This has been added for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1243
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1244
    ^ self expandPlaceholdersWith:(Array with:str1 with:str2 with:str3 with:str4)
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1245
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1246
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1247
     '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
  1248
	bindWith:'smalltalk' with:'c++' with:'c' with:'assembler'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1249
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1250
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1251
2344
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1252
bindWith:str1 with:str2 with:str3 with:str4 with:str5
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1253
    "return a copy of the receiver, where a '%1' .. '%5' escapes
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1254
     are replaced by str1 .. str5 respectively.
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1255
     This has been added for VisualAge compatibility."
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1256
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1257
    ^ 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
  1258
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1259
    "Created: 31.1.1997 / 16:25:42 / cg"
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1260
!
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1261
5343
bac9bc59a698 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5342
diff changeset
  1262
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
  1263
    "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
  1264
     are replaced by str1 .. str6 respectively.
5343
bac9bc59a698 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5342
diff changeset
  1265
     This has been added for VisualAge compatibility."
bac9bc59a698 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5342
diff changeset
  1266
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1267
    ^ self expandPlaceholdersWith:(Array with:str1 with:str2
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1268
					 with:str3 with:str4
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1269
					 with:str5 with:str6)
11524
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1270
!
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1271
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1272
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
  1273
    "return a copy of the receiver, where a '%1' .. '%7' escapes
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1274
     are replaced by str1 .. str7 respectively.
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1275
     This has been added for VisualAge compatibility."
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1276
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1277
    ^ self expandPlaceholdersWith:(Array with:str1 with:str2
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1278
					 with:str3 with:str4
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1279
					 with:str5 with:str6
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1280
					 with:str7)
5343
bac9bc59a698 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5342
diff changeset
  1281
!
bac9bc59a698 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5342
diff changeset
  1282
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1283
bindWithArguments:anArrayOfStrings
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1284
    "return a copy of the receiver, where a '%i' escape
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1285
     is replaced by the coresponding string from the argument array.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1286
     '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
  1287
     This has been added for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1288
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1289
    ^ self expandPlaceholdersWith:anArrayOfStrings
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1290
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1291
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1292
     'do you prefer %1 or rather %2 (not talking about %3) ?'
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1293
	bindWithArguments:#('smalltalk' 'c++' 'c')
12196
5718ecf81f37 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 12188
diff changeset
  1294
5718ecf81f37 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 12188
diff changeset
  1295
     'do you %(what) ?'
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1296
	bindWithArguments:(Dictionary new at:#'what' put:'understand'; yourself)
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1297
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1298
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1299
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1300
subStrings
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1301
    "return an array consisting of all words contained in the receiver.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1302
     Words are separated by whitespace.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1303
     This has been added for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1304
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1305
    ^ self asCollectionOfWords
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1306
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1307
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1308
     'hello world, this is smalltalk' subStrings
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1309
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1310
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1311
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1312
subStrings:separatorCharacter
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1313
    "return an array consisting of all words contained in the receiver.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1314
     Words are separated by separatorCharacter.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1315
     This has been added for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1316
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1317
    ^ self asCollectionOfSubstringsSeparatedBy:separatorCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1318
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1319
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1320
     'foo:bar:baz:smalltalk' subStrings:$:
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1321
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1322
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1323
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1324
trimSeparators
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1325
    "return a copy of the receiver without leading and trailing whiteSpace"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1326
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1327
    ^ self withoutSeparators
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
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1330
!CharacterArray methodsFor:'Compatibility-VW'!
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1331
6139
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1332
asLogicalFileSpecification
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1333
    ^ self asFilename
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1334
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1335
    "Created: / 30.10.2001 / 17:29:53 / cg"
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1336
!
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1337
6119
b6cee2c2b2ea +asQualifiedReference
Claus Gittinger <cg@exept.de>
parents: 5964
diff changeset
  1338
asQualifiedReference
b6cee2c2b2ea +asQualifiedReference
Claus Gittinger <cg@exept.de>
parents: 5964
diff changeset
  1339
    ^ BindingReference pathString:(self string)
b6cee2c2b2ea +asQualifiedReference
Claus Gittinger <cg@exept.de>
parents: 5964
diff changeset
  1340
b6cee2c2b2ea +asQualifiedReference
Claus Gittinger <cg@exept.de>
parents: 5964
diff changeset
  1341
!
b6cee2c2b2ea +asQualifiedReference
Claus Gittinger <cg@exept.de>
parents: 5964
diff changeset
  1342
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1343
expandMacros
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1344
    "ST80 compatibility - expand '<..>' macros with
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1345
     argument strings. Similar to #bindWith:.
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1346
     Read the comment in #expandMacrosWithArguments: about
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1347
     limited compatibility issues."
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1348
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1349
    ^ self expandMacrosWithArguments:#()
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1350
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1351
    "
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1352
     'hello<n>foo' expandMacros
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1353
    "
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1354
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1355
    "Modified: / 18.6.1998 / 16:03:02 / cg"
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
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1358
expandMacrosWith:arg
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1359
    "ST80 compatibility - expand '<..>' macros with
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1360
     argument strings. Similar to #bindWith:.
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1361
     Read the comment in #expandMacrosWithArguments: about
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1362
     limited compatibility issues."
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1363
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1364
    ^ self expandMacrosWithArguments:(Array with:arg)
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
    "Created: / 1.11.1997 / 13:01:28 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1367
    "Modified: / 1.11.1997 / 13:30:50 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1368
!
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1369
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1370
expandMacrosWith:arg1 with:arg2
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1371
    "ST80 compatibility - expand '<..>' macros with
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1372
     argument strings. Similar to #bindWith:.
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1373
     Read the comment in #expandMacrosWithArguments: about
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1374
     limited compatibility issues."
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1375
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1376
    ^ self expandMacrosWithArguments:(Array with:arg1 with:arg2)
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1377
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1378
    "Modified: / 6.7.1998 / 21:58:14 / cg"
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1379
!
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1380
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1381
expandMacrosWith:arg1 with:arg2 with:arg3
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1382
    "ST80 compatibility - expand '<..>' macros with
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1383
     argument strings. Similar to #bindWith:.
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1384
     Read the comment in #expandMacrosWithArguments: about
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1385
     limited compatibility issues."
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1386
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1387
    ^ self expandMacrosWithArguments:(Array with:arg1 with:arg2 with:arg3)
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
10353
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1390
expandMacrosWith:arg1 with:arg2 with:arg3 with:arg4
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1391
    "ST80 compatibility - expand '<..>' macros with
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1392
     argument strings. Similar to #bindWith:.
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1393
     Read the comment in #expandMacrosWithArguments: about
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1394
     limited compatibility issues."
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1395
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1396
    ^ 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
  1397
!
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1398
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1399
expandMacrosWithArguments:argArray
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1400
    "ST80 compatibility - expand '<..>' macros with
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1401
     argument strings. Similar to #bindWith:.
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1402
     WARNING: possibly not all ST80 expansions are supported here."
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1403
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1404
    "/ supported expansions:
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1405
    "/
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1406
    "/   <#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
  1407
    "/   <#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
  1408
    "/   <#?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
  1409
    "/              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
  1410
    "/   <n>        replace by a newLine character
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1411
    "/   <t>        replace by a tab character
6834
eba4b58b8692 fixed expandMacros (%-escape)
Claus Gittinger <cg@exept.de>
parents: 6810
diff changeset
  1412
    "/   %X         the X character itself
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1413
8999
f3fda66ea51e #expandMacrosWithArguments: - be mor friendly to xml strings.
Stefan Vogel <sv@exept.de>
parents: 8971
diff changeset
  1414
    |in out c fmt nr arg s1 s2 peekc|
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1415
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1416
    in := self readStream.
10721
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1417
    out := CharacterWriteStream on:(self species uninitializedNew:self size).
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1418
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1419
    [in atEnd] whileFalse:[
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1420
	c := in next.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1421
	c == $% ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1422
	    c := in next.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1423
	    out nextPut:c
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1424
	] ifFalse:[c ~~ $< ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1425
	    out nextPut:c.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1426
	] ifFalse:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1427
	    peekc := in peek.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1428
	    [peekc == $<] whileTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1429
		out nextPut:$<.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1430
		peekc := in nextPeek.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1431
	    ].
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1432
	    peekc == $n ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1433
		peekc := in nextPeek.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1434
		peekc == $> ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1435
		    in next.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1436
		    out cr.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1437
		] ifFalse:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1438
		    out nextPutAll:'<n'.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1439
		]
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1440
	    ] ifFalse:[peekc == $t ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1441
		peekc := in nextPeek.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1442
		peekc == $> ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1443
		    in next.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1444
		    out tab.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1445
		] ifFalse:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1446
		    out nextPutAll:'<t'.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1447
		]
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1448
	    ] ifFalse:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1449
		peekc isDigit ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1450
		    "start an argument expansion ..."
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1451
		    nr := Integer readFrom:in onError:nil.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1452
		    nr isNil ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1453
			"this cannot happen (there is at least one digit)"
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1454
			self error:'invalid format' mayProceed:true.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1455
			^ self
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1456
		    ].
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1457
		    fmt := in next.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1458
		    (fmt ~~ $? and:[in peek ~~ $>]) ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1459
			out nextPut:$<.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1460
			nr printOn:out.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1461
			out nextPut:fmt.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1462
		    ] ifFalse:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1463
			(nr between:1 and:argArray size) ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1464
			    arg := argArray at:nr.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1465
			] ifFalse:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1466
			    arg := ''
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1467
			].
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1468
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1469
			fmt == $p ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1470
			    "expand with args printString"
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1471
			    arg printOn:out.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1472
			] ifFalse:[fmt == $s ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1473
			    "expand with arg itself"
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1474
			    arg isText ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1475
				out contentsSpecies isText ifFalse:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1476
				    out := (WriteStream on:Text new) nextPutAll:out contents; yourself.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1477
				].
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1478
				out nextPutAll:arg.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1479
			    ] ifFalse:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1480
				out nextPutAll:arg "asString" string.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1481
			    ]
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1482
			] ifFalse:[fmt == $? ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1483
			    s1 := in upTo:$:.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1484
			    s2 := in nextUpTo:$>.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1485
			    arg == true ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1486
				out nextPutAll:s1
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1487
			    ] ifFalse:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1488
				out nextPutAll:s2
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1489
			    ].
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1490
			] ifFalse:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1491
			    "what does VW do here ?"
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1492
			    self error:'invalid format' mayProceed:true.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1493
			    ^ self
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1494
			]]].
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1495
			c := in next.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1496
			c ~~ $> ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1497
			    "what does VW do here ?"
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1498
			    self error:'invalid format' mayProceed:true.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1499
			    ^ self
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1500
			]
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1501
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1502
		    ].
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1503
		] ifFalse:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1504
		    out nextPut:$<.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1505
		].
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1506
	    ]].
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1507
	]].
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1508
    ].
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1509
    ^ out contents
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1510
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1511
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1512
     'hello <1s> how are you' expandMacrosWith:(OperatingSystem getLoginName)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1513
     'one plus one is <1p>' expandMacrosWith:2
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1514
    "
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1515
10721
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1516
    "Modified: / 18-09-2007 / 22:50:43 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1517
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1518
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1519
isCharacters
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1520
    "added for visual works compatibility"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1521
    ^ true
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1522
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1523
13510
150d12670b9f comment/format
Claus Gittinger <cg@exept.de>
parents: 13504
diff changeset
  1524
13624
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
  1525
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1526
!CharacterArray methodsFor:'character searching'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1527
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1528
includesMatchCharacters
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  1529
    "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
  1530
     for match operations; false if not.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1531
     Here, do not care for $\ escapes"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1532
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1533
    ^ self includesAny:'*#['
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1534
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1535
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1536
     '*foo' includesMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1537
     '\*foo' includesMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1538
     '\*foo' includesUnescapedMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1539
     '*foo' includesMatchCharacters
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1540
     '\\*foo' includesMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1541
     'foo*' includesMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1542
     'foo\*' includesMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1543
     'foo\' includesMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1544
    "
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1545
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1546
    "Modified: 2.4.1997 / 18:12:34 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1547
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1548
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1549
includesSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1550
    "return true, if the receiver contains any whitespace characters"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1551
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1552
    ^ (self indexOfSeparator ~~ 0)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1553
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
     'hello world' includesSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1556
     'helloworld' includesSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1557
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1558
!
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
includesUnescapedMatchCharacters
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1561
    "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
  1562
     for match operations; false if not.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1563
     Here, care for $\ escapes"
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1564
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  1565
    |idx sz specialChars escape|
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1566
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1567
    idx := 1.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1568
    sz := self size.
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  1569
    specialChars := '*#[\'.
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  1570
    (escape := self class matchEscapeCharacter) ~~ $\ ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1571
	specialChars := specialChars copy.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1572
	specialChars at:specialChars size put:escape
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  1573
    ].
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  1574
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1575
    [true] whileTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1576
	idx := self indexOfAny:specialChars startingAt:idx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1577
	idx == 0 ifTrue:[^ false].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1578
	(self at:idx) == escape ifFalse:[^ true].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1579
	idx := idx + 2.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1580
	idx > sz ifTrue:[^ false].
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1581
    ].
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1582
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1583
    "
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1584
     '*foo' includesUnescapedMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1585
     '\*foo' includesUnescapedMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1586
     '\\foo' includesUnescapedMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1587
     '\\\$foo' includesUnescapedMatchCharacters
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1588
     '*foo' includesUnescapedMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1589
     '\\*foo' includesUnescapedMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1590
     'foo*' includesUnescapedMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1591
     'foo\*' includesUnescapedMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1592
     'foo\' includesUnescapedMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1593
    "
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1594
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1595
    "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
  1596
    "Created: 2.4.1997 / 17:23:26 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1597
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1598
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1599
indexOfControlCharacterStartingAt:startIndex
3668
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1600
    "return the index of the next control character;
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1601
     starting the search at startIndex, searching forward;
3668
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1602
     that is a character with asciiValue < 32.
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1603
     Return 0 if none is found."
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1604
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1605
    |start  "{ Class: SmallInteger }"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1606
     mySize "{ Class: SmallInteger }"|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1607
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1608
    start := startIndex.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1609
    mySize := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1610
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1611
    start to:mySize do:[:index |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1612
	(self at:index) isControlCharacter ifTrue:[^ index]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1613
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1614
    ^ 0
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1615
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1616
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1617
     'hello world' asTwoByteString            indexOfControlCharacterStartingAt:1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1618
     'hello world\foo' withCRsasTwoByteString indexOfControlCharacterStartingAt:1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1619
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1620
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1621
    "Modified: / 21.7.1998 / 17:25:07 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1622
!
3668
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1623
8541
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1624
indexOfNonSeparator
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1625
    "return the index of the first non-whitespace character.
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1626
     return 0 if no non-separator was found"
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1627
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1628
    ^ self indexOfNonSeparatorStartingAt:1.
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1629
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1630
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1631
     '    hello world' indexOfNonSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1632
     '    ' indexOfNonSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1633
     'a   ' indexOfNonSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1634
     'abc' indexOfNonSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1635
     ' ' indexOfNonSeparator
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1636
     '' indexOfNonSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1637
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1638
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1639
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1640
indexOfNonSeparatorStartingAt:startIndex
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1641
    "return the index of the next non-whitespace character,
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1642
     starting the search at startIndex, searching forward;
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1643
     return 0 if no non-separator was found"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1644
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1645
    |start  "{ Class: SmallInteger }"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1646
     mySize "{ Class: SmallInteger }"|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1647
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1648
    start := startIndex.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1649
    mySize := self size.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1650
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1651
    start to:mySize do:[:index |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1652
	(self at:index) isSeparator ifFalse:[^ index]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1653
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1654
    ^ 0
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1655
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1656
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1657
     '    hello world' indexOfNonSeparatorStartingAt:1
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1658
     '    ' indexOfNonSeparatorStartingAt:1
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1659
     'a   ' indexOfNonSeparatorStartingAt:2
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1660
    "
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1661
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1662
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1663
     |s index1 index2|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1664
     s := '   foo    bar      baz'.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1665
     index1 := s indexOfNonSeparatorStartingAt:1.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1666
     index2 := s indexOfSeparatorStartingAt:index1.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1667
     s copyFrom:index1 to:index2 - 1
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1668
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1669
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1670
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1671
indexOfSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1672
    "return the index of the first whitespace character;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1673
     starting the search at the beginning, searching forward;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1674
     return 0 if no separator was found"
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
    ^ self indexOfSeparatorStartingAt:1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1677
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1678
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1679
     'hello world' indexOfSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1680
     'helloworld' indexOfSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1681
     'hello   ' indexOfSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1682
     '   hello' indexOfSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1683
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1684
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1685
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1686
indexOfSeparatorStartingAt:startIndex
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1687
    "return the index of the next whitespace character,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1688
     starting the search at startIndex, searching forward;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1689
     return 0 if no separator was found"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1690
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1691
    |start  "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1692
     mySize "{ Class: SmallInteger }"|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1693
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1694
    start := startIndex.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1695
    mySize := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1696
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1697
    start to:mySize do:[:index |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1698
	(self at:index) isSeparator ifTrue:[^ index]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1699
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1700
    ^ 0
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1701
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1702
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1703
     'hello world' indexOfSeparatorStartingAt:3
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1704
     ' hello world' indexOfSeparatorStartingAt:3
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1705
     'hello world ' indexOfSeparatorStartingAt:3
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1706
     'hello world ' indexOfSeparatorStartingAt:6
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1707
     'hello world ' indexOfSeparatorStartingAt:7
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1708
     'helloworld ' indexOfSeparatorStartingAt:7
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1709
     'helloworld' indexOfSeparatorStartingAt:7
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1710
    "
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1711
!
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1712
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1713
lastIndexOfSeparator
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1714
    "return the last index of the whitespace character.
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1715
     (i.e. start the search at the end and search backwards);
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1716
     Returns 0 if no separator is found."
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1717
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1718
    ^ self lastIndexOfSeparatorStartingAt:(self size)
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1719
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1720
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1721
     'hello world' lastIndexOfSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1722
     'helloworld' lastIndexOfSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1723
     'hel lo wor ld' lastIndexOfSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1724
     'hel   ' lastIndexOfSeparator 6
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1725
    "
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1726
!
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1727
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1728
lastIndexOfSeparatorStartingAt:startIndex
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1729
    "return the index of the previous whitespace character,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1730
     starting the search at startIndex (and searching backwards);
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1731
     returns 0 if no separator was found"
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  "{ Class: SmallInteger }"|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1734
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1735
    start := startIndex.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1736
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1737
    start to:1 by:-1 do:[:index |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1738
	(self at:index) isSeparator ifTrue:[^ index]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1739
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1740
    ^ 0
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1741
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1742
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1743
     'hello world' lastIndexOfSeparatorStartingAt:3
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1744
     'hello world' lastIndexOfSeparatorStartingAt:7
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1745
     'helloworld' lastIndexOfSeparatorStartingAt:7
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1746
     ' helloworld' lastIndexOfSeparatorStartingAt:7
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1747
    "
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1748
! !
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1749
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1750
!CharacterArray methodsFor:'comparing'!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1751
6742
292775fda600 avoid endless recursion when comparing int < string
Claus Gittinger <cg@exept.de>
parents: 6655
diff changeset
  1752
< aString
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1753
    "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
  1754
     receiver is greater than the argument. Otherwise return false.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1755
     This comparison is based on the elements ascii code -
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1756
     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
  1757
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1758
    |mySize    "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1759
     otherSize "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1760
     n         "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1761
     c1 c2|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1762
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1763
    mySize := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1764
    otherSize := aString string size.
6742
292775fda600 avoid endless recursion when comparing int < string
Claus Gittinger <cg@exept.de>
parents: 6655
diff changeset
  1765
    n := mySize min:otherSize.
292775fda600 avoid endless recursion when comparing int < string
Claus Gittinger <cg@exept.de>
parents: 6655
diff changeset
  1766
292775fda600 avoid endless recursion when comparing int < string
Claus Gittinger <cg@exept.de>
parents: 6655
diff changeset
  1767
    1 to:n do:[:index |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1768
	c1 := self at:index.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1769
	c2 := aString at:index.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1770
	(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
  1771
    ].
292775fda600 avoid endless recursion when comparing int < string
Claus Gittinger <cg@exept.de>
parents: 6655
diff changeset
  1772
    ^ mySize < otherSize
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1773
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1774
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1775
= aString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1776
    "Compare the receiver with the argument and return true if the
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1777
     receiver is equal to the argument. Otherwise return false.
1252
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  1778
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  1779
     This compare does NOT ignore case differences,
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1780
     therefore 'foo' = 'Foo' will return false.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1781
     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
  1782
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1783
    |mySize    "{ Class: SmallInteger }"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1784
     otherSize |
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1785
5963
23462e06dcff compare with Texts fixed (should compare equal if strings are)
Claus Gittinger <cg@exept.de>
parents: 5946
diff changeset
  1786
    (aString isString or:[aString species == self species]) ifFalse:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1787
	^ false
5963
23462e06dcff compare with Texts fixed (should compare equal if strings are)
Claus Gittinger <cg@exept.de>
parents: 5946
diff changeset
  1788
    ].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1789
    mySize := self size.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1790
    otherSize := aString size.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1791
    mySize == otherSize ifFalse:[^ false].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1792
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1793
    1 to:mySize do:[:index |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1794
	(self at:index) = (aString at:index) ifFalse:[^ false].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1795
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1796
    ^ true
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1797
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1798
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1799
     'foo' = 'Foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1800
     'foo' = 'bar'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1801
     'foo' = 'foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1802
     'foo' = 'foo' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1803
     'foo' asText = 'foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1804
     'foo' asText = 'foo' asText
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1805
    "
1252
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  1806
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  1807
    "Modified: 22.4.1996 / 15:53:58 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1808
!
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1809
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  1810
> aString
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1811
    "Compare the receiver with the argument and return true if the
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1812
     receiver is greater than the argument. Otherwise return false.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1813
     This comparison is based on the elements ascii code -
1252
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  1814
     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
  1815
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1816
    |mySize    "{ Class: SmallInteger }"
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1817
     otherSize "{ Class: SmallInteger }"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1818
     n         "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1819
     c1 c2|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1820
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1821
    mySize := self size.
5929
a3d2e7aaa3a3 added #compareCaselessWith:
Claus Gittinger <cg@exept.de>
parents: 5898
diff changeset
  1822
    otherSize := aString string size.
a3d2e7aaa3a3 added #compareCaselessWith:
Claus Gittinger <cg@exept.de>
parents: 5898
diff changeset
  1823
    n := mySize min:otherSize.
a3d2e7aaa3a3 added #compareCaselessWith:
Claus Gittinger <cg@exept.de>
parents: 5898
diff changeset
  1824
a3d2e7aaa3a3 added #compareCaselessWith:
Claus Gittinger <cg@exept.de>
parents: 5898
diff changeset
  1825
    1 to:n do:[:index |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1826
	c1 := self at:index.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1827
	c2 := aString at:index.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1828
	(c1 == c2 or:[c1 = c2]) ifFalse:[^ c1 > c2].
5929
a3d2e7aaa3a3 added #compareCaselessWith:
Claus Gittinger <cg@exept.de>
parents: 5898
diff changeset
  1829
    ].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1830
    ^ mySize > otherSize
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1831
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1832
    "Modified: 22.4.1996 / 15:55:00 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1833
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1834
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1835
compareCaselessWith:aString
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1836
    "Compare the receiver against the argument, ignoreing case.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1837
     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
  1838
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1839
     This comparison is based on the elements ascii code -
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1840
     i.e. national characters are NOT treated specially.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1841
     'foo' compareWith: 'Foo' will return 0"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1842
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1843
    |mySize    "{ Class: SmallInteger }"
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1844
     otherSize "{ Class: SmallInteger }"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1845
     n         "{ Class: SmallInteger }"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1846
     c1 c2|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1847
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1848
    mySize := self size.
5739
4fd3be7ccc75 oops some relational ops did accept a non-string arg
Claus Gittinger <cg@exept.de>
parents: 5732
diff changeset
  1849
    otherSize := aString string size.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1850
    n := mySize min:otherSize.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1851
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1852
    1 to:n do:[:index |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1853
	c1 := (self at:index) asLowercase.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1854
	c2 := (aString at:index) asLowercase.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1855
	c1 > c2 ifTrue:[^ 1].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1856
	c1 < c2 ifTrue:[^ -1].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1857
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1858
    mySize > otherSize ifTrue:[^ 1].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1859
    mySize < otherSize ifTrue:[^ -1].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1860
    ^ 0
1252
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  1861
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  1862
    "Modified: 22.4.1996 / 15:56:07 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1863
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1864
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1865
compareWith:aString
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1866
    "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
  1867
     greater, 0 if equal and -1 if less than the argument.
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  1868
     This comparison is based on the elements' codepoints -
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1869
     i.e. upper/lowercase & national characters are NOT treated specially.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1870
     'foo' compareWith: 'Foo' will return 1.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1871
     while 'foo' sameAs:'Foo' will return true"
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1872
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1873
    |mySize    "{ Class: SmallInteger }"
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1874
     otherSize "{ Class: SmallInteger }"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1875
     n         "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1876
     c1 c2|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1877
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1878
    mySize := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1879
    otherSize := aString string size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1880
    n := mySize min:otherSize.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1881
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1882
    1 to:n do:[:index |
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1883
	c1 := self at:index.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1884
	c2 := aString at:index.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1885
	c1 > c2 ifTrue:[^ 1].
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1886
	c1 < c2 ifTrue:[^ -1].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1887
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1888
    mySize > otherSize ifTrue:[^ 1].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1889
    mySize < otherSize ifTrue:[^ -1].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1890
    ^ 0
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1891
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1892
    "Modified: 22.4.1996 / 15:56:07 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1893
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1894
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  1895
endsWith:aStringOrCharacter
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  1896
    "return true, if the receiver ends with something, aStringOrCharacter."
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  1897
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  1898
    |s|
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  1899
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  1900
    (s := self string) ~~ self ifTrue:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1901
	^ s endsWith:aStringOrCharacter
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  1902
    ].
12912
d12e31b830f5 changed: #endsWith:
Claus Gittinger <cg@exept.de>
parents: 12767
diff changeset
  1903
    (self notEmpty and:[aStringOrCharacter isCharacter]) ifTrue:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1904
	^ self last = aStringOrCharacter
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  1905
    ].
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  1906
    ^ super endsWith:aStringOrCharacter
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  1907
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  1908
    "
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  1909
     'hello world' endsWith:'world'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  1910
     'hello world' asText allBold endsWith:'world'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  1911
    "
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  1912
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  1913
    "Modified: 12.5.1996 / 15:49:18 / cg"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  1914
!
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  1915
11838
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  1916
hammingDistanceTo:aString
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  1917
    "return the hamming distance (the number of characters which are different).
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1918
     In information theory, the Hamming distance between two strings of equal length
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1919
     is the number of positions for which the corresponding symbols are different.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1920
     Put another way, it measures the minimum number of substitutions required to change
11838
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  1921
     one into the other, or the number of errors that transformed one string into the other."
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  1922
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  1923
    self assert:(aString size == self size).
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  1924
    ^ 1 to:self size count:[:idx | (self at:idx) ~= (aString at:idx)]
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  1925
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  1926
    "
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  1927
     'roses' hammingDistanceTo:'toned'
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  1928
    "
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  1929
!
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  1930
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1931
hash
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1932
    "return an integer useful as a hash-key"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1933
13879
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  1934
    "/ immediately after any change, execute (maybe in a debugger):
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  1935
    "/      Set allSubInstancesDo:[:s | s rehash]
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1936
    ^ self hash_dragonBook
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1937
    "/ ^ self hash_sdbm.
13879
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  1938
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  1939
    "
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  1940
     'a' hash
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  1941
     'a' asUnicode16String hash
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  1942
     'aa' hash
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  1943
     'aa' asUnicode16String hash
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  1944
     'ab' hash
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  1945
     'ab' asUnicode16String hash
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  1946
     'ab' hash
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  1947
     'ab' asArray hash
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  1948
    "
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  1949
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  1950
    "Modified: / 26-12-2011 / 14:09:07 / cg"
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  1951
!
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  1952
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  1953
hash_dragonBook
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  1954
    "return an integer useful as a hash-key"
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  1955
10698
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  1956
    |h g|
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  1957
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  1958
    "/
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  1959
    "/ this is the dragon-book algorithm
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  1960
    "/
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  1961
    h := 0.
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  1962
    self reverseDo:[:char |
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  1963
"/ 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
  1964
"/        h := (h bitShift:4) + char asciiValue.
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1965
	h := (h bitShift:4).
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1966
	h:= h + char codePoint.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1967
	h := h bitAnd:16rFFFFFFFF.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1968
	g := (h bitAnd: 16rF0000000).
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1969
	g ~~ 0 ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1970
	    h := h bitXor:(g bitShift:-24).
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1971
	    h := h bitXor:g.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1972
	].
10698
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  1973
    ].
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  1974
    "/
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  1975
    "/ multiply by large prime to spread values
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  1976
    "/ This speeds up Set and Dictionary by a factor of 10!!
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  1977
    "/
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  1978
    h := h * 31415821.
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  1979
    h := h bitAnd:16r3fffffff.
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  1980
    ^ h
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  1981
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  1982
    "
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  1983
     'a' hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  1984
     'a' asUnicode16String hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  1985
     'aa' hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  1986
     'aa' asUnicode16String hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  1987
     'ab' hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  1988
     'ab' asUnicode16String hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  1989
     'ab' hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  1990
     'ab' asArray hash
10698
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  1991
    "
13879
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  1992
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  1993
    "Created: / 26-12-2011 / 13:46:06 / cg"
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  1994
!
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  1995
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  1996
hash_sdbm
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  1997
    "return an integer useful as a hash-key"
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  1998
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  1999
    |h|
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2000
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2001
    "/
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2002
    "/ this is the sdbm algorithm
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2003
    "/
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2004
    h := 0.
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2005
    self do:[:char |
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2006
	h := (h * 65599) + char codePoint.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2007
	h := h bitAnd:16r3FFFFFFF.
13879
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2008
    ].
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2009
    ^ h
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2010
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2011
    "
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2012
     'a' hash_sdbm
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2013
     'aa' hash_sdbm
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2014
     'ab' hash_sdbm
13879
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2015
    "
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2016
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2017
    "Created: / 26-12-2011 / 13:48:13 / cg"
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2018
!
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2019
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2020
levenshteinTo:aString
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2021
    "return the levenshtein distance to the argument, aString;
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2022
     this value corresponds to the number of replacements that have to be
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2023
     made to get aString from the receiver.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2024
     See IEEE transactions on Computers 1976 Pg 172 ff."
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2025
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2026
    "
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2027
     in the following, we assume that ommiting a character
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2028
     is less of an error than inserting an extra character.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2029
     Therefore the different insertion (i) and deletion (d) values.
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2030
	s: substitution weight
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2031
	k: keyboard weight (typing a nearby key) - or nil (then use s)
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2032
	c: case weight                           - or nil (then use s)
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2033
	e: exchange weight                       - or nil (then use s*2)
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2034
	i: insertion of extra character weight
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2035
	d: delete of a character weight
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2036
    "
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2037
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2038
    ^ StringUtilities
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2039
	    levenshteinDistanceFrom:self
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2040
	    to:aString
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2041
	    s:4 k:4 c:4 e:nil i:2 d:6
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2042
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2043
    "
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2044
     'computer' levenshteinTo:'computer'
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2045
     'cOmputer' levenshteinTo:'computer'
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2046
     'cOmpuTer' levenshteinTo:'computer'
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2047
     'cimputer' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2048
     'cumputer' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2049
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2050
     'cmputer' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2051
     'coomputer' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2052
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2053
     'ocmprt' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2054
     'computer' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2055
     'ocmputer' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2056
     'cmputer' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2057
     'computer' levenshteinTo:'cmputer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2058
     'Computer' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2059
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2060
     'compiter' levenshteinTo:'computer'
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2061
     'compoter' levenshteinTo:'computer'
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2062
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2063
     'comptuer' levenshteinTo:'computer'
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2064
    "
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2065
!
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2066
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2067
levenshteinTo:aString s:substWeight k:kbdTypoWeight c:caseWeight i:insrtWeight d:deleteWeight
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2068
    "parametrized levenshtein.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2069
     return the levenshtein distance to the argument, aString;
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2070
     this value corrensponds to the number of replacements that have to be
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2071
     made to get aString from the receiver.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2072
     The arguments are the costs for
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2073
	s:substitution,
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2074
	k:keyboard type (substitution),
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2075
	c:case-change,
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2076
	i:insertion
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2077
	d:deletion
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2078
     of a character.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2079
     See IEEE transactions on Computers 1976 Pg 172 ff"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2080
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2081
    ^ StringUtilities
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2082
	    levenshteinDistanceFrom:self
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2083
	    to:aString
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2084
	    s:substWeight k:kbdTypoWeight c:caseWeight e:nil i:insrtWeight d:deleteWeight
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2085
!
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2086
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2087
sameAs:aString
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2088
    "Compare the receiver with the argument like =, but ignore case differences.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2089
     Return true or false."
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2090
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2091
    |mySize "{ Class: SmallInteger }"
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2092
     otherSize c1 c2|
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2093
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2094
    self == aString ifTrue:[^ true].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2095
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2096
    mySize := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2097
    otherSize := aString string size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2098
    mySize == otherSize ifFalse:[^ false].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2099
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2100
    1 to:mySize do:[:index |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2101
	c1 := self at:index.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2102
	c2 := aString at:index.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2103
	c1 == c2 ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2104
	    (c1 sameAs:c2) ifFalse:[^ false].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2105
	]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2106
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2107
    ^ true
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2108
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2109
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2110
     'foo' sameAs: 'Foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2111
     'foo' sameAs: 'bar'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2112
     'foo' sameAs: 'foo'
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2113
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2114
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2115
    "Modified: 22.4.1996 / 15:56:17 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2116
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2117
5242
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2118
sameAs:aString ignoreCase:ignoreCase
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2119
    "Compare the receiver with the argument.
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2120
     If ignoreCase is true, this is the same as #sameAs:,
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2121
     if false, this is the same as #=."
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2122
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2123
    ignoreCase ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2124
	^ self sameAs:aString
5242
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2125
    ].
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2126
    ^ self = aString
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2127
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2128
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2129
     'foo' sameAs:'Foo' ignoreCase:false
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2130
     'foo' sameAs:'foo' ignoreCase:true
5242
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2131
    "
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2132
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2133
!
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2134
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2135
sameCharacters:aString
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2136
    "count & return the number of characters which are the same
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2137
     (ignoring case and emphasis) in the receiver and the argument, aString."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2138
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2139
    |n "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2140
     c1 c2 cnt|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2141
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2142
    n := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2143
    n := n min:(aString string size).
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
    cnt := 0.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2146
    1 to:n do:[:index |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2147
	c1 := self at:index.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2148
	c2 := aString at:index.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2149
	((c1 == c2)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2150
	or:[c1 asLowercase = c2 asLowercase]) ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2151
	    cnt := cnt + 1
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
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2154
    ^ cnt
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2155
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2156
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2157
     'foobarbaz' sameCharacters: 'foo'
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2158
     'foobarbaz' sameCharacters: 'Foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2159
     'foobarbaz' sameCharacters: 'baz'
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2160
    "
5510
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2161
!
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2162
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2163
sameEmphasisAs:aStringOrText
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2164
    "compare the receivers and the arguments emphasis"
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2165
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2166
    ^ self emphasis = aStringOrText emphasis
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2167
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2168
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2169
     'hello' asText sameEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2170
     'hello' asText sameEmphasisAs: 'hello' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2171
     'hello' asText allBold sameEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2172
     'hello' asText allBold sameEmphasisAs: 'fooba' asText allBold
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2173
     'hello' asText allBold sameEmphasisAs: 'fooba' asText allItalic
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2174
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2175
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
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2178
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  2179
sameStringAndEmphasisAs:aStringOrText
5739
4fd3be7ccc75 oops some relational ops did accept a non-string arg
Claus Gittinger <cg@exept.de>
parents: 5732
diff changeset
  2180
    "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
  2181
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2182
    aStringOrText isString ifFalse:[^ false].
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2183
    (self string = aStringOrText string) ifFalse:[^ false].
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2184
    self hasChangeOfEmphasis = aStringOrText hasChangeOfEmphasis ifFalse:[^ false].
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2185
    ^ self emphasis = aStringOrText emphasis
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2186
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2187
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2188
     'hello' asText sameEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2189
     'hello' asText sameEmphasisAs: 'hello' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2190
     'hello' asText allBold sameEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2191
     'hello' asText allBold sameEmphasisAs: 'fooba' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2192
     'hello' asText allBold sameEmphasisAs: 'fooba' asText allItalic
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2193
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2194
     'hello' sameEmphasisAs: 'hello' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2195
     'hello' sameEmphasisAs: 'hello' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2196
     'hello' sameEmphasisAs: 'fooba'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2197
     'hello' sameEmphasisAs: 'fooba' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2198
     'hello' sameEmphasisAs: 'fooba' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2199
     'hello' sameEmphasisAs: 'fooba' asText allItalic
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2200
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2201
     'hello' asText sameStringAndEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2202
     'hello' asText sameStringAndEmphasisAs: 'hello' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2203
     'hello' asText allBold sameStringAndEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2204
     'hello' asText allBold sameStringAndEmphasisAs: 'fooba' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2205
     'hello' asText allBold sameStringAndEmphasisAs: 'fooba' asText allItalic
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2206
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2207
     'hello' sameStringAndEmphasisAs: 'hello' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2208
     'hello' sameStringAndEmphasisAs: 'hello' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2209
     'hello' sameStringAndEmphasisAs: 'fooba'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2210
     'hello' sameStringAndEmphasisAs: 'fooba' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2211
     'hello' sameStringAndEmphasisAs: 'fooba' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2212
     'hello' sameStringAndEmphasisAs: 'fooba' asText allItalic
5510
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2213
    "
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2214
!
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2215
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2216
spellAgainst: aString
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2217
    "return an integer between 0 and 100 indicating how similar
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2218
     the argument is to the receiver.  No case conversion is done.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2219
     This algorithm is much simpler (but also less exact) than the
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2220
     levenshtein distance. Experiment which is better for your
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2221
     application."
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2222
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2223
    | i1     "{ Class: SmallInteger }"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2224
      i2     "{ Class: SmallInteger }"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2225
      next1  "{ Class: SmallInteger }"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2226
      next2  "{ Class: SmallInteger }"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2227
      size1  "{ Class: SmallInteger }"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2228
      size2  "{ Class: SmallInteger }"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2229
      score  "{ Class: SmallInteger }"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2230
      maxLen "{ Class: SmallInteger }" |
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2231
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2232
    size1 := self size.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2233
    size2 := aString size.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2234
    maxLen := size1 max:size2.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2235
    score := 0.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2236
    i1 := i2 := 1.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2237
    [i1 <= size1 and: [i2 <= size2]] whileTrue:[
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2238
	next1 := i1 + 1.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2239
	next2 := i2 + 1.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2240
	(self at:i1) == (aString at:i2) ifTrue: [
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2241
	    score := score+1.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2242
	    i1 := next1.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2243
	    i2 := next2
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2244
	] ifFalse: [
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2245
	    (i2 < size2 and: [(self at:i1) == (aString at:next2)]) ifTrue: [
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2246
		i2 := next2
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2247
	    ] ifFalse: [
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2248
		(i1 < size1 and: [(self at:next1) == (aString at:i2)]) ifTrue: [
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2249
		    i1 := next1
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2250
		] ifFalse: [
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2251
		    i1 := next1.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2252
		    i2 := next2
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2253
		]
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2254
	    ]
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2255
	]
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2256
    ].
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2257
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2258
    score == maxLen ifTrue: [^ 100].
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2259
    ^ 100 * score // maxLen
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2260
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2261
    "
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2262
     'Smalltalk' spellAgainst: 'Smalltlak'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2263
     'Smalltalk' spellAgainst: 'smalltlak'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2264
     'Smalltalk' spellAgainst: 'smalltalk'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2265
     'Smalltalk' spellAgainst: 'smalltlk'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2266
     'Smalltalk' spellAgainst: 'Smalltolk'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2267
    "
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2268
!
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2269
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2270
startsWith:aString
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2271
    "return true, if the receiver starts with something, aString.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2272
     If the argument is empty, true is returned."
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2273
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2274
    |s|
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2275
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2276
    (s := self string) ~~ self ifTrue:[
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2277
	^ s startsWith:aString
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2278
    ].
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2279
    ^ super startsWith:aString
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2280
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2281
    "
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2282
     'hello world' startsWith:'hello'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2283
     'hello world' asText allBold startsWith:'hello'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2284
     'hello world' asText allBold startsWith:''
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2285
    "
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2286
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2287
    "Created: 12.5.1996 / 15:46:40 / cg"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2288
    "Modified: 12.5.1996 / 15:49:24 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2289
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2290
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2291
!CharacterArray methodsFor:'converting'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2292
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2293
asArrayOfSubstrings
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2294
    "return an array of substrings from the receiver, interpreting
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2295
     separators (i.e. spaces & newlines) as word-delimiters.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2296
     This is a compatibility method - the actual work is done in
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2297
     asCollectionOfWords."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2298
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2299
    ^ self asCollectionOfWords asArray
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2300
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2301
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2302
     '1 one two three four 5 five' asArrayOfSubstrings
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2303
     '1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2304
one
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2305
	two three four 5 five' asArrayOfSubstrings
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2306
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2307
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2308
11881
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2309
asAsciiZ
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2310
    "if the receiver does not end with a 0-valued character, return a copy of it,
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2311
     with an additional 0-character. Otherwise return the receiver. This is sometimes
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2312
     needed when a string has to be passed to C, which needs 0-terminated strings.
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2313
     Notice, that all singleByte strings are already 0-terminated in ST/X, whereas wide
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2314
     strings are not."
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2315
12658
2e9c209be0cc changed: #asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 12615
diff changeset
  2316
    (self notEmpty and:[self last codePoint == 0]) ifTrue:[^ self ].
11881
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2317
    ^ self copyWith:(Character value:0).
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2318
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2319
    "
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2320
     'abc' asAsciiZ
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2321
     'abc' asWideString asAsciiZ
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2322
    "
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2323
!
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2324
13524
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2325
asByteArray
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2326
    |bytes sz bytesPerCharacter idx|
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2327
13611
ba8c7372218a variable renamed in: #inspector2TabBytes
Claus Gittinger <cg@exept.de>
parents: 13524
diff changeset
  2328
    self string ~~ self ifTrue:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2329
	"/ for text and other wrappers
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2330
	^ self string asByteArray
13611
ba8c7372218a variable renamed in: #inspector2TabBytes
Claus Gittinger <cg@exept.de>
parents: 13524
diff changeset
  2331
    ].
ba8c7372218a variable renamed in: #inspector2TabBytes
Claus Gittinger <cg@exept.de>
parents: 13524
diff changeset
  2332
ba8c7372218a variable renamed in: #inspector2TabBytes
Claus Gittinger <cg@exept.de>
parents: 13524
diff changeset
  2333
    "/ for real strings, a fallback
13524
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2334
    sz := self size.
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2335
    bytesPerCharacter := self bitsPerCharacter // 8.
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2336
    bytes := ByteArray new:(sz * bytesPerCharacter).
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2337
    idx := 1.
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2338
    self do:[:char |
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2339
	|code|
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2340
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2341
	code := char codePoint.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2342
	bytesPerCharacter == 2 ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2343
	    bytes unsignedShortAt:idx put:code
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2344
	] ifFalse:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2345
	    bytesPerCharacter == 4 ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2346
		bytes unsignedLongAt:idx put:code
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2347
	    ] ifFalse:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2348
		bytes at:idx put:code
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2349
	    ].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2350
	].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2351
	idx := idx + bytesPerCharacter.
13524
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2352
    ].
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2353
    ^ bytes
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2354
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2355
    "Created: / 27-07-2011 / 00:56:17 / cg"
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2356
!
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2357
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2358
asCollectionOfLines
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2359
    "return a collection containing the lines (separated by cr)
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2360
     of the receiver. If multiple cr's occur in a row, the result will
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2361
     contain empty strings."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2362
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2363
    ^ self asCollectionOfSubstringsSeparatedBy:Character cr
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2364
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2365
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2366
     '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
  2367
     '1 one\\\\2 two\3 three' withCRs asCollectionOfLines
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2368
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2369
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2370
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2371
asCollectionOfSubstringsSeparatedBy:aCharacter
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2372
    "return a collection containing the lines (separated by aCharacter)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2373
     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
  2374
     the result will contain empty strings."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2375
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2376
    ^ self asCollectionOfSubCollectionsSeparatedBy:aCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2377
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2378
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2379
     '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
  2380
     '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
  2381
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2382
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2383
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2384
asCollectionOfSubstringsSeparatedBy:aCharacter exceptIn:ch
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2385
    "return a collection containing the lines (separated by aCharacter)
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2386
     of the receiver. If aCharacter occurs multiple times in a row,
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2387
     the result will contain empty strings. The separation is not done,
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2388
     inside a matching pair of ch-substrings. Can be used to tokenize csv-like strings."
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2389
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2390
    |lines myClass except i c
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2391
     startIndex    "{ Class:SmallInteger }"
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2392
     stopIndex     "{ Class:SmallInteger }" |
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2393
11905
cbc2191cfe2d return stringCollections from asCollectionOfXXX
Claus Gittinger <cg@exept.de>
parents: 11904
diff changeset
  2394
    lines := StringCollection new.
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2395
    myClass := self species.
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2396
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2397
    startIndex := 1.
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2398
    except := false.
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2399
    [
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2400
	i := startIndex-1.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2401
	[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2402
	    i := i+1.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2403
	    c := self at:i.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2404
	    c = ch ifTrue:[ except := except not. ].
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2405
	    i < self size and:[except or:[c ~= aCharacter]]
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2406
	] whileTrue.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2407
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2408
	c = aCharacter ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2409
	    stopIndex := i -1.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2410
	] ifFalse: [
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2411
	    stopIndex := i.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2412
	].
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2413
	(stopIndex < startIndex) ifTrue: [
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2414
	    lines add:(myClass new:0)
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2415
	] ifFalse: [
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2416
	    lines add:(self copyFrom:startIndex to:stopIndex)
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2417
	].
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2418
	startIndex := stopIndex + 2.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2419
	startIndex <= self size
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2420
    ] whileTrue.
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2421
    ^ lines
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2422
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2423
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2424
     'asd''f;d''dd;s' asCollectionOfSubstringsSeparatedBy:$; exceptIn:$'
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2425
    "
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2426
    "/ 'asd "hello bla" foo "bla bla" bar' asCollectionOfSubstringsSeparatedBy:$  exceptIn:$"
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2427
!
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2428
13344
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2429
asCollectionOfSubstringsSeparatedBy:aFieldSeparatorString textSeparator:aTextSeparatorOrNil
13343
3f058ad0d2f1 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13332
diff changeset
  2430
    "return a collection containing the words (separated by aFieldSeparatorString) of the receiver.
13327
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2431
     Individual words might be enclosed in aTextSeparator characters, in case they contain blanks or fieldSeparators.
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2432
     Typically used for CSV line parsing, with a $; as aFieldSeparator and $'' (dquote) as textSeparator."
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2433
13344
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2434
    |aTextSeparatorChar items scanningWord inStream element lastIsFieldSeparator sz|
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2435
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2436
    aTextSeparatorOrNil isNil ifTrue:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2437
	^ self asCollectionOfSubstringsSeparatedByAll: aFieldSeparatorString
13327
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2438
    ].
13344
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2439
    sz := aTextSeparatorOrNil size.
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2440
    sz = 0 ifTrue:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2441
	aTextSeparatorChar := aTextSeparatorOrNil
13344
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2442
    ] ifFalse:[sz = 1  ifTrue:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2443
	"this is a String. Fetch the first character - compatibility to older expecco libs"
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2444
	aTextSeparatorChar := aTextSeparatorOrNil first.
13344
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2445
    ] ifFalse:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2446
	self error:'textSeparatoSize > 1'.
13344
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2447
    ]].
13327
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2448
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2449
    items := OrderedCollection new.
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2450
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2451
    inStream := ReadStream on:self.
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2452
    [
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2453
	inStream skipSeparators.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2454
	inStream atEnd
13327
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2455
    ] whileFalse:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2456
	lastIsFieldSeparator := false.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2457
	inStream peek == aTextSeparatorChar ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2458
	    inStream next.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2459
	    element := ''.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2460
	    scanningWord := true.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2461
	    [ inStream atEnd not and:[scanningWord] ] whileTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2462
		element := element , (inStream upTo:aTextSeparatorChar).
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2463
		(inStream peek == aTextSeparatorChar) ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2464
		    element := element , aTextSeparatorChar .
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2465
		    inStream next.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2466
		] ifFalse:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2467
		    scanningWord := false.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2468
		].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2469
	    ].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2470
	    inStream upToAll:aFieldSeparatorString.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2471
	] ifFalse:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2472
	    element := inStream upToAll:aFieldSeparatorString
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2473
	].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2474
	items add:element.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2475
	lastIsFieldSeparator := (inStream skipThroughAll:aFieldSeparatorString) notNil.
13343
3f058ad0d2f1 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13332
diff changeset
  2476
    ].
3f058ad0d2f1 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13332
diff changeset
  2477
    lastIsFieldSeparator ifTrue:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2478
	"empty element at the end of the line"
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2479
	items add:''.
13327
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2480
    ].
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2481
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2482
    ^ items
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2483
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2484
    "
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2485
     self assert:(('#First#, #Second,SecondAdd#, #Third#' asCollectionOfSubstringsSeparatedBy:',' textSeparator: $#)
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2486
		  sameContentsAs:#('First' 'Second,SecondAdd' 'Third')).
13327
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2487
     self assert:(('#Fir##st#, #Second,SecondAdd#, #Third#' asCollectionOfSubstringsSeparatedBy:',' textSeparator: $#)
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2488
		  sameContentsAs:#('Fir#st' 'Second,SecondAdd' 'Third')).
13327
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2489
     self assert:(('#Fir##st#, Second,SecondAdd, #Third#' asCollectionOfSubstringsSeparatedBy:',' textSeparator: $#)
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2490
		  sameContentsAs:#('Fir#st' 'Second' 'SecondAdd' 'Third')).
13343
3f058ad0d2f1 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13332
diff changeset
  2491
     self assert:(('First,Second,Third,,' asCollectionOfSubstringsSeparatedBy:',' textSeparator:nil)
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2492
		   sameContentsAs:#('First' 'Second' 'Third' '' '')).
13344
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2493
     self assert:(('First,Second,Third,,' asCollectionOfSubstringsSeparatedBy:',' textSeparator:'#')
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2494
		   sameContentsAs:#('First' 'Second' 'Third' '' '')).
13327
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2495
    "
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2496
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2497
    "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
  2498
!
999589445aa7 add new method for splitting a csv string into csv elements
ab
parents: 10437
diff changeset
  2499
7339
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2500
asCollectionOfSubstringsSeparatedByAll:aSeparatorString
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2501
    "return a collection containing the lines (separated by aSeparatorString)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2502
     of the receiver. If aSeparatorString occurs multiple times in a row,
7339
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2503
     the result will contain empty strings."
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2504
8852
9f5984eff2c2 use asCollectionOfSubCollectionsSeparatedBy*
Claus Gittinger <cg@exept.de>
parents: 8794
diff changeset
  2505
    ^ self asCollectionOfSubCollectionsSeparatedByAll:aSeparatorString
9f5984eff2c2 use asCollectionOfSubCollectionsSeparatedBy*
Claus Gittinger <cg@exept.de>
parents: 8794
diff changeset
  2506
9f5984eff2c2 use asCollectionOfSubCollectionsSeparatedBy*
Claus Gittinger <cg@exept.de>
parents: 8794
diff changeset
  2507
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2508
     '1::2::3::4::5::' asCollectionOfSubstringsSeparatedByAll:'::'
7339
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2509
    "
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2510
!
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2511
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2512
asCollectionOfSubstringsSeparatedByAny:aCollectionOfSeparators
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2513
    "return a collection containing the words (separated by any character
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2514
     from aCollectionOfSeparators) of the receiver.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2515
     This allows breaking up strings using any character as separator."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2516
8852
9f5984eff2c2 use asCollectionOfSubCollectionsSeparatedBy*
Claus Gittinger <cg@exept.de>
parents: 8794
diff changeset
  2517
    ^ self asCollectionOfSubCollectionsSeparatedByAny:aCollectionOfSeparators
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2518
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2519
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2520
     'hello:world:isnt:this nice' asCollectionOfSubstringsSeparatedByAny:#($:)
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2521
     'hello:world:isnt:this nice' asCollectionOfSubstringsSeparatedByAny:':'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2522
     'hello:world:isnt:this nice' asCollectionOfSubstringsSeparatedByAny:(Array with:$: with:Character space)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2523
     'hello:world:isnt:this nice' asCollectionOfSubstringsSeparatedByAny:': '
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2524
     'h1e2l3l4o' asCollectionOfSubstringsSeparatedByAny:($1 to: $9)
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2525
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2526
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2527
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2528
asCollectionOfWords
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2529
    "return a collection containing the words (separated by whitespace)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2530
     of the receiver. Multiple occurrences of whitespace characters will
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2531
     be treated like one - i.e. whitespace is skipped."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2532
7797
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2533
    |words|
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2534
11905
cbc2191cfe2d return stringCollections from asCollectionOfXXX
Claus Gittinger <cg@exept.de>
parents: 11904
diff changeset
  2535
    words := StringCollection new.
7797
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2536
    self asCollectionOfWordsDo:[:w | words add:w].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2537
    ^ words
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2538
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2539
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2540
     'hello world isnt this nice' asCollectionOfWords
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2541
     '    hello    world   isnt   this   nice  ' asCollectionOfWords
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2542
     'hello' asCollectionOfWords
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2543
     '' asCollectionOfWords
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2544
     '      ' asCollectionOfWords
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2545
     ' foo bar__baz__bla__ bar ' asCollectionOfWords
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2546
     ' foo __bar__baz__bla__ bar ' asCollectionOfWords
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2547
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2548
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2549
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2550
asCollectionOfWordsDo:aBlock
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2551
    "evaluate aBlock for each word (separated by whitespace) of the receiver.
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2552
     Multiple occurrences of whitespace characters will be treated like one
7797
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2553
     - i.e. whitespace is skipped.
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2554
     Returns the number of words (i.e. the number of invocations of aBlock)."
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2555
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2556
    |count  "{ Class:SmallInteger }"
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2557
     start  "{ Class:SmallInteger }"
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2558
     stop   "{ Class:SmallInteger }"
7797
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2559
     mySize "{ Class:SmallInteger }"|
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2560
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2561
    count := 0.
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2562
    start := 1.
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2563
    mySize := self size.
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2564
    [start <= mySize] whileTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2565
	start := self indexOfNonSeparatorStartingAt:start.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2566
	start == 0 ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2567
	    ^ count
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2568
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2569
	stop := self indexOfSeparatorStartingAt:start.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2570
	stop == 0 ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2571
	    aBlock value:(self copyFrom:start to:mySize).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2572
	    ^ count + 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2573
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2574
	aBlock value:(self copyFrom:start to:(stop - 1)).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2575
	start := stop.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2576
	count := count + 1
7797
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2577
    ].
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2578
    ^ count
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2579
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2580
    "
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2581
     'hello world isnt this nice' asCollectionOfWordsDo:[:w | Transcript showCR:w]
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2582
     '    hello    world   isnt   this   nice  ' asCollectionOfWordsDo:[:w | Transcript showCR:w]
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2583
     'hello' asCollectionOfWordsDo:[:w | Transcript showCR:w]
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2584
     '' asCollectionOfWordsDo:[:w | Transcript showCR:w]
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2585
     '      ' asCollectionOfWordsDo:[:w | Transcript showCR:w]
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2586
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2587
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2588
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2589
asComposedText
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2590
    "ST-80 compatibility
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2591
     - ST/X does not (as today) support composedTexts."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2592
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2593
    ^ ComposedText fromString:self string
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2594
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2595
    "Modified: 27.4.1996 / 13:30:30 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2596
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2597
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2598
asFilename
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2599
    "return a Filename with pathname taken from the receiver"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2600
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2601
    ^ Filename named:self "(self asSingleByteStringReplaceInvalidWith:$?)"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2602
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2603
    "Modified: 20.5.1996 / 09:38:15 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2604
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2605
3060
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2606
asFixedPoint
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2607
    "read a fixedPoint number from the receiver.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2608
     Notice, that errors may occur during the read,
7423
5b25b8e82453 comments
Claus Gittinger <cg@exept.de>
parents: 7422
diff changeset
  2609
     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
  2610
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2611
    ^ FixedPoint readFromString:self
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2612
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2613
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2614
     '0.123' asFixedPoint
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2615
     '12345' asFixedPoint
3060
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2616
     '(1/5)' asFixedPoint
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2617
     'foo' asFixedPoint
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2618
     Object errorSignal handle:[:ex | ex return:0] do:['foo' asFixedPoint]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2619
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2620
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2621
    "Modified: / 25.10.1997 / 15:19:00 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2622
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2623
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2624
asFixedPoint:scale
3060
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2625
    "read a fixedPoint number with scale number of post-decimal digits
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2626
     from the receiver. Scale controls the number of displayed digits,
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2627
     not the number of actually valid digits.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2628
     Notice, that errors may occur during the read,
7423
5b25b8e82453 comments
Claus Gittinger <cg@exept.de>
parents: 7422
diff changeset
  2629
     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
  2630
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2631
    ^ (FixedPoint readFromString:self) scale:scale
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2632
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2633
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2634
     '0.123' asFixedPoint:2
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2635
     '123456' asFixedPoint:2
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2636
     ('3.14157' asFixedPoint:1) asFixedPoint:5
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2637
     '3.14157' asFixedPoint:2
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2638
     'foo' asFixedPoint:2
3060
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2639
    "
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2640
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2641
    "Modified: / 25.10.1997 / 15:21:57 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2642
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2643
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2644
asFloat
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2645
    "read a float number from the receiver.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2646
     Notice, that errors may occur during the read,
7422
200486204923 comments
Claus Gittinger <cg@exept.de>
parents: 7421
diff changeset
  2647
     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
  2648
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2649
    ^ (Number readFromString:self) asFloat
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2650
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2651
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2652
     '0.123' asFloat
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2653
     '12345' asFloat
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2654
     '(1/5)' asFloat
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2655
     Object errorSignal handle:[:ex | ex return:0] do:['foo' asFloat]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2656
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2657
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2658
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2659
asInteger
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2660
    "convert the receiver into an integer.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2661
     Notice, that errors may occur during the read,
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2662
     so you better setup some exception handler when using this method.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2663
     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
  2664
     in other smalltalks.
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2665
     For less strict integer reading, use Integer readFrom:aString"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2666
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2667
    ^ Integer readFromString:self
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2668
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2669
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2670
     '12345678901234567890' asInteger
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2671
     '-1234' asInteger
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2672
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2673
     The following raises an error:
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2674
	 '0.123' asInteger              <- reader finds more after reading 0
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2675
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2676
     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
  2677
	 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
  2678
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2679
     '0.123' asInteger
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2680
     '0.123' asNumber    <- returns what you expect
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2681
     Object errorSignal handle:[:ex | ex return:0] do:['foo' asInteger]
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2682
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2683
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2684
!
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
asLowercase
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2687
    "return a copy of myself in lowercase letters"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2688
8003
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  2689
    |newStr c bitsPerCharacter
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2690
     mySize "{ Class: SmallInteger }" |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2691
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2692
    mySize := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2693
    mySize == 0 ifTrue:[^ self].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2694
    newStr := self species new:mySize.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2695
    bitsPerCharacter := newStr bitsPerCharacter.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2696
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2697
    1 to:mySize do:[:i |
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2698
	c := (self at:i) asLowercase.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2699
	c bitsPerCharacter > bitsPerCharacter ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2700
	    newStr := c stringSpecies fromString:newStr.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2701
	].
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2702
	newStr at:i put:c
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2703
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2704
    ^ newStr
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
     'HelloWorld' asLowercase
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2708
     'HelloWorld' asLowercaseFirst
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2709
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2710
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2711
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2712
asLowercaseFirst
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2713
    "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
  2714
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2715
    |newString firstChar firstCharAsLowercase|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2716
11525
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
  2717
    self isEmpty ifTrue:[^ self].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2718
    firstChar := (self at:1).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2719
    firstCharAsLowercase := firstChar asLowercase.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2720
    firstChar == firstCharAsLowercase ifTrue:[ ^ self].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2721
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2722
    firstCharAsLowercase bitsPerCharacter > self bitsPerCharacter ifTrue:[
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2723
	newString := firstCharAsLowercase stringSpecies fromString:self.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2724
    ] ifFalse:[
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2725
	newString := self stringSpecies fromString:self.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2726
    ].
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2727
    newString at:1 put:firstCharAsLowercase.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2728
    ^ newString
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
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2731
     'HelloWorld' asLowercase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2732
     'HelloWorld' asLowercaseFirst
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2733
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2734
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2735
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2736
asLowercaseLast
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2737
    "return a copy of myself where the last character is
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2738
     converted to lowercase."
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2739
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2740
    |newString sz|
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2741
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2742
    sz := self size.
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2743
    newString := self copyFrom:1 to:sz.
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2744
    sz > 0 ifTrue:[
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2745
	newString at:sz put:(newString at:sz) asLowercase
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2746
    ].
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2747
    ^ newString
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2748
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2749
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2750
     'HelloWorld' asLowercase
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2751
     'HelloWorlD' asLowercaseLast
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2752
    "
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2753
!
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2754
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2755
asNumber
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2756
    "read a number from the receiver.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2757
     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
  2758
     so you better setup some signal handler when using this method.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2759
     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
  2760
     it does not handle smalltalk numbers (i.e. radix).
c6396149df08 comment
Claus Gittinger <cg@exept.de>
parents: 9087
diff changeset
  2761
     To read a smalltalk number, use Number >> readSmalltalkFrom:.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2762
     This may change if ANSI specifies it."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2763
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2764
"/ ST-80 behavior:
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2765
"/  ^ Number readFromString:self onError:0
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2766
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2767
    ^ Number readFromString:self
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2768
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2769
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2770
     '123'     asNumber
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2771
     '123.567' asNumber
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2772
     '(5/6)'   asNumber
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2773
     'foo'     asNumber
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2774
     Object errorSignal handle:[:ex | ex returnWith:0] do:['foo' asNumber]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2775
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2776
!
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
asNumberFromFormatString:ignored
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2779
    "read a number from the receiver, ignoring any nonDigit characters.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2780
     This is typically used to convert from strings which include
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2781
     dollar-signs or millenium digits. However, this method also ignores
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2782
     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
  2783
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2784
    |tempString|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2785
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2786
    tempString := self collect:[:char | char isDigit].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2787
    ^ Number readFromString:tempString onError:0
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2788
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2789
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2790
     'USD 123' asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2791
     'DM 123'  asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2792
     '123'     asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2793
     '123.567' asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2794
     '(5/6)'   asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2795
     'foo'     asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2796
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2797
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2798
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2799
asOneByteString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2800
    "return the receiver converted to a 'normal' string.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2801
     Same as asSingleByteString - for compatibility."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2802
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2803
    ^ self asSingleByteString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2804
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2805
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2806
asSingleByteString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2807
    "return the receiver converted to a 'normal' string.
11904
f766874c31b7 comment
Claus Gittinger <cg@exept.de>
parents: 11881
diff changeset
  2808
     Raises an error if unrepresentable characters are encountered.
f766874c31b7 comment
Claus Gittinger <cg@exept.de>
parents: 11881
diff changeset
  2809
     See also: asSingleByteStringIfPossible and asSingleByteStringReplaceInvalidWith:"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2810
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2811
    ^ String fromString:self
11904
f766874c31b7 comment
Claus Gittinger <cg@exept.de>
parents: 11881
diff changeset
  2812
f766874c31b7 comment
Claus Gittinger <cg@exept.de>
parents: 11881
diff changeset
  2813
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2814
     (Unicode16String with:(Character value:16rFF)) asSingleByteString
11904
f766874c31b7 comment
Claus Gittinger <cg@exept.de>
parents: 11881
diff changeset
  2815
     (Unicode16String with:(Character value:16rFFFF)) asSingleByteString
f766874c31b7 comment
Claus Gittinger <cg@exept.de>
parents: 11881
diff changeset
  2816
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2817
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2818
7977
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  2819
asSingleByteStringIfPossible
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  2820
    "if possible, return the receiver converted to a 'normal' string.
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  2821
     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
  2822
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  2823
    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
  2824
    (self contains:[:char | char codePoint > 255]) ifFalse:[^ self asSingleByteString].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2825
    ^ self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2826
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2827
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2828
     'hello' asSingleByteStringIfPossible
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2829
     'hello' asUnicodeString asSingleByteStringIfPossible
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2830
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2831
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2832
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2833
asSingleByteStringReplaceInvalidWith:replacementCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2834
    "return the receiver converted to a 'normal' string,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2835
     with invalid characters replaced by replacementCharacter.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2836
     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
  2837
     and replace characters above code-255 with some replacement."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2838
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2839
    |newString|
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
    newString := String new:(self size).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2842
    1 to:self size do:[:idx |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2843
	|char|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2844
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2845
	char := self at:idx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2846
	char codePoint <= 16rFF ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2847
	    newString at:idx put:char
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2848
	] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2849
	    newString at:idx put:replacementCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2850
	].
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2851
    ].
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2852
    ^ newString
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2853
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2854
    "Created: 30.6.1997 / 13:02:14 / cg"
7977
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  2855
!
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  2856
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2857
asString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2858
    "return myself - I am a string"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2859
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2860
    ^ self
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
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2863
asStringCollection
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2864
    "return a collection of lines from myself."
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
    ^ StringCollection fromString:self "string"
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
    "Modified: 13.5.1996 / 20:36:59 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2869
!
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  2870
1434
a317ba02d685 allow aText asSymbol
Claus Gittinger <cg@exept.de>
parents: 1429
diff changeset
  2871
asSymbol
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  2872
    "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
  2873
     The receiver must be a singleByte-String.
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  2874
     TwoByte- and FourByteSymbols are (currently ?) not allowed."
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  2875
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  2876
    |str|
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  2877
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2878
    str := self string.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2879
    str ~~ self ifTrue:[ ^ str asSymbol ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2880
    ^ self asSingleByteString asSymbol
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2881
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2882
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2883
asSymbolIfInterned
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2884
    "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
  2885
     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
  2886
	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
  2887
     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
  2888
     The receiver must be a singleByte-String.
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  2889
     TwoByte- and FourByteSymbols are (currently ?) not allowed."
1435
3ee1fde2aa58 allow asSymbolIfInterned for Texts
Claus Gittinger <cg@exept.de>
parents: 1434
diff changeset
  2890
6642
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  2891
    |s|
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  2892
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  2893
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  2894
    s := self string.
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  2895
    s ~~ self ifTrue:[
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  2896
       ^ s asSymbolIfInterned
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  2897
    ].
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  2898
    ^ nil.
1435
3ee1fde2aa58 allow asSymbolIfInterned for Texts
Claus Gittinger <cg@exept.de>
parents: 1434
diff changeset
  2899
3ee1fde2aa58 allow asSymbolIfInterned for Texts
Claus Gittinger <cg@exept.de>
parents: 1434
diff changeset
  2900
    "Created: 22.5.1996 / 16:37:04 / cg"
9192
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
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2903
asText
9403
ba6ca2bcfe10 documentation
Stefan Vogel <sv@exept.de>
parents: 9391
diff changeset
  2904
    "return a Text-object (string with emphasis) from myself."
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2905
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2906
    "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
  2907
    Text isNil ifTrue:[^ self].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2908
    ^ Text fromString:self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2909
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2910
    "Created: 12.5.1996 / 10:41:14 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2911
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2912
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2913
asTitlecase
8027
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2914
    "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
  2915
     and everything else to lowercase.
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2916
     See the comment in Character on what titlecase is."
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2917
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2918
    |newStr c bitsPerCharacter
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2919
     mySize "{ Class: SmallInteger }" |
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2920
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2921
    mySize := self size.
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2922
    newStr := self species new:mySize.
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2923
    bitsPerCharacter := newStr bitsPerCharacter.
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2924
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2925
    1 to:mySize do:[:i |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2926
	i == 1 ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2927
	    c := (self at:i) asTitlecase.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2928
	] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2929
	    c := (self at:i) asLowercase.
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
	c bitsPerCharacter > bitsPerCharacter ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2932
	    newStr := c stringSpecies fromString:newStr.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2933
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2934
	newStr at:i put:c
8027
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2935
    ].
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2936
    ^ newStr
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2937
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2938
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2939
     'helloWorld' asTitlecase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2940
     'HelloWorld' asTitlecase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2941
     'HELLOWORLD' asTitlecase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2942
     'helloworld' asTitlecase
8027
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2943
    "
9192
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
asTitlecaseFirst
8023
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  2947
    "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
  2948
     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
  2949
     (2-character glyphs), which consist of an upper- and lower-case characters.
93db40068fba comment
Claus Gittinger <cg@exept.de>
parents: 8023
diff changeset
  2950
     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
  2951
     receiver."
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  2952
8026
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  2953
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2954
     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
  2955
     (Let us write this compound character using ASCII as 'dz'.)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2956
     This character uppercases to character U+01F1, LATIN CAPITAL LETTER DZ.
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2957
     (Which is basically 'DZ'.)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2958
     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
  2959
     (Which we can write 'Dz'.)
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  2960
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  2961
      character uppercase titlecase
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  2962
      --------- --------- ---------
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  2963
      dz        DZ        Dz
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  2964
    "
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  2965
8023
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  2966
    |newString firstChar firstCharAsTitlecase|
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  2967
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  2968
    firstChar := (self at:1).
8025
04d9b6ef3012 comments
Claus Gittinger <cg@exept.de>
parents: 8024
diff changeset
  2969
    firstCharAsTitlecase := firstChar asTitlecase.
8023
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  2970
    firstChar == firstCharAsTitlecase ifTrue:[ ^ self].
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  2971
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  2972
    firstCharAsTitlecase bitsPerCharacter > self bitsPerCharacter ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2973
	newString := firstCharAsTitlecase stringSpecies fromString:self.
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  2974
    ] ifFalse:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2975
	newString := self stringSpecies fromString:self.
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  2976
    ].
8023
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  2977
    newString at:1 put:firstCharAsTitlecase.
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  2978
    ^ newString
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  2979
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  2980
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2981
     'helloWorld' asTitlecaseFirst
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2982
     'HelloWorld' asTitlecaseFirst
8023
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  2983
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2984
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2985
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2986
asTwoByteString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2987
    "return the receiver converted to a two-byte string.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2988
     Will be obsolete soon."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2989
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2990
    ^ TwoByteString fromString:self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2991
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2992
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2993
asURI
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2994
    "return an URI with string taken from the receiver"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2995
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2996
    ^ URI fromString:self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2997
!
8710
Stefan Vogel <sv@exept.de>
parents: 8646
diff changeset
  2998
5776
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  2999
asURL
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  3000
    "return an URL-object from myself."
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  3001
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  3002
    ^ URL fromString:self
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  3003
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  3004
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3005
     'http://www.exept.de:80/index.html' asURL host
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3006
     'http://www.exept.de:80/index.html' asURL port
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3007
     'http://www.exept.de:80/index.html' asURL method
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3008
     'http://www.exept.de:80/index.html' asURL path
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3009
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3010
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3011
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3012
asUnicode16String
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3013
    "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
  3014
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3015
    ^ ((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
  3016
!
8295
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3017
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3018
asUnicode32String
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3019
    "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
  3020
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3021
    ^ ((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
  3022
!
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3023
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3024
asUnicodeString
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3025
    "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
  3026
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3027
    ^ ((UnicodeString new:self size) replaceFrom:1 to:self size with:self startingAt:1)
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3028
!
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3029
13073
19261a5b4430 added: #asUnixFilename
Claus Gittinger <cg@exept.de>
parents: 13050
diff changeset
  3030
asUnixFilename
19261a5b4430 added: #asUnixFilename
Claus Gittinger <cg@exept.de>
parents: 13050
diff changeset
  3031
    "return a UnixFilename with pathname taken from the receiver"
19261a5b4430 added: #asUnixFilename
Claus Gittinger <cg@exept.de>
parents: 13050
diff changeset
  3032
19261a5b4430 added: #asUnixFilename
Claus Gittinger <cg@exept.de>
parents: 13050
diff changeset
  3033
    ^ UnixFilename named:self
19261a5b4430 added: #asUnixFilename
Claus Gittinger <cg@exept.de>
parents: 13050
diff changeset
  3034
19261a5b4430 added: #asUnixFilename
Claus Gittinger <cg@exept.de>
parents: 13050
diff changeset
  3035
    "Created: / 20-09-2010 / 21:42:55 / cg"
19261a5b4430 added: #asUnixFilename
Claus Gittinger <cg@exept.de>
parents: 13050
diff changeset
  3036
!
19261a5b4430 added: #asUnixFilename
Claus Gittinger <cg@exept.de>
parents: 13050
diff changeset
  3037
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3038
asUppercase
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3039
    "return a copy of myself in uppercase letters"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3040
8003
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3041
    |newStr c bitsPerCharacter
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3042
     mySize "{ Class: SmallInteger }" |
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3043
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3044
    mySize := self size.
8954
12e701d7b5ac allow for receiver to be empty in asLowercase and asUppercase.
Claus Gittinger <cg@exept.de>
parents: 8938
diff changeset
  3045
    mySize == 0 ifTrue:[^ self].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3046
    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
  3047
    bitsPerCharacter := newStr bitsPerCharacter.
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3048
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3049
    1 to:mySize do:[:i |
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3050
	c := (self at:i) asUppercase.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3051
	c bitsPerCharacter > bitsPerCharacter ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3052
	    newStr := c stringSpecies fromString:newStr.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3053
	].
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3054
	newStr at:i put:c
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3055
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3056
    ^ newStr
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3057
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3058
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3059
     'helloWorld' asUppercase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3060
     'helloWorld' asUppercaseFirst
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3061
     (Character value:16rB5) asString asUppercase   -- needs 16 bits !!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3062
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3063
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3064
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3065
asUppercaseFirst
8003
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3066
    "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
  3067
     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
  3068
     receiver."
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3069
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3070
    |newString firstChar firstCharAsUppercase|
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3071
12679
18c4eabbb673 changed: #asUppercaseFirst
Claus Gittinger <cg@exept.de>
parents: 12665
diff changeset
  3072
    self isEmpty ifTrue:[^ self].
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3073
    firstChar := self at:1.
8003
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3074
    firstCharAsUppercase := firstChar asUppercase.
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3075
    firstChar == firstCharAsUppercase ifTrue:[ ^ self].
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3076
12679
18c4eabbb673 changed: #asUppercaseFirst
Claus Gittinger <cg@exept.de>
parents: 12665
diff changeset
  3077
    "/ 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
  3078
    firstCharAsUppercase bitsPerCharacter > self bitsPerCharacter ifTrue:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3079
	newString := firstCharAsUppercase stringSpecies fromString:self.
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  3080
    ] ifFalse:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3081
	newString := self stringSpecies fromString:self.
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  3082
    ].
8003
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3083
    newString at:1 put:firstCharAsUppercase.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3084
    ^ newString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3085
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3086
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3087
     'helloWorld' asUppercase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3088
     'helloWorld' asUppercaseFirst
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3089
     'HelloWorld' asUppercaseFirst
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3090
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3091
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3092
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3093
asUppercaseLast
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3094
    "return a copy of myself where the last character is
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3095
     converted to uppercase."
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3096
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3097
    |newString sz|
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3098
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3099
    sz := self size.
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3100
    newString := self copyFrom:1 to:sz.
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3101
    sz > 0 ifTrue:[
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3102
	newString at:sz put:(newString at:sz) asUppercase
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3103
    ].
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3104
    ^ newString
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3105
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3106
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3107
     'HelloWorld' asUppercase
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3108
     'HelloWorld' asUppercaseLast
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3109
    "
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3110
!
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3111
11062
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3112
literalArrayEncoding
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3113
    "encode myself as an array literal, from which a copy of the receiver
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3114
     can be reconstructed with #decodeAsLiteralArray."
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3115
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3116
    ^ self
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3117
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3118
    "Modified: 1.9.1995 / 02:25:45 / claus"
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3119
    "Modified: 22.4.1996 / 13:00:50 / cg"
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3120
!
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3121
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3122
string
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3123
    "return the receiver - for ST-80 compatibility"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3124
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3125
    ^ self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3126
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3127
    "Modified: 27.4.1996 / 13:29:30 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3128
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3129
11320
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  3130
writeStream
12196
5718ecf81f37 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 12188
diff changeset
  3131
    "return a stream for writing onto the receiver.
5718ecf81f37 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 12188
diff changeset
  3132
     Redefined to return a CharacterWriteStream which automatically checks for the bytesPerCharacter
5718ecf81f37 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 12188
diff changeset
  3133
     and replaces the stream-buffer as required."
5718ecf81f37 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 12188
diff changeset
  3134
11320
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  3135
    ^ CharacterWriteStream on:self
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3136
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3137
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3138
!CharacterArray methodsFor:'copying'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3139
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3140
, aStringOrCharacter
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3141
    "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
  3142
     This is nonStandard, but convenient"
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3143
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3144
    |myWidth otherWidth|
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3145
1050
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3146
    aStringOrCharacter isCharacter ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3147
	^ self copyWith:aStringOrCharacter
1050
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3148
    ].
1396
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3149
    aStringOrCharacter isText ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3150
	^ aStringOrCharacter concatenateFromString:self
1396
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3151
    ].
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3152
    aStringOrCharacter isString ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3153
	(otherWidth := aStringOrCharacter bitsPerCharacter) ~~ (myWidth := self bitsPerCharacter) ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3154
	    otherWidth > myWidth ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3155
		^ (aStringOrCharacter species fromString:self) , aStringOrCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3156
	    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3157
	    ^ self , (self species fromString:aStringOrCharacter)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3158
	].
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3159
    ].
1050
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3160
    ^ super , aStringOrCharacter
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3161
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3162
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3163
     'hello' , $1
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3164
     'hello' , '1'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3165
     'hello' , (' world' asText allBold)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3166
     'hello' , (JISEncodedString fromString:' world')
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3167
     (JISEncodedString fromString:'hello') , ' world'
1411
a3b3ab3044c6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1396
diff changeset
  3168
1422
9a0b792f2953 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1411
diff changeset
  3169
     Transcript showCR:
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3170
	 (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
  3171
    "
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3172
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3173
    "Modified: 28.6.1997 / 00:13:17 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3174
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3175
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3176
,, aString
7020
f51001115a54 comment
penk
parents: 6998
diff changeset
  3177
    "concatenate with a newLine in between"
6965
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3178
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3179
    ^ (self copyWith:Character cr) , aString
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3180
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3181
   "
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3182
     hello ,, world
7020
f51001115a54 comment
penk
parents: 6998
diff changeset
  3183
     'hello' ,, 'world'
6965
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3184
   "
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3185
!
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3186
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3187
chopTo:maxLen
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3188
    "if the receivers size is less or equal to maxLen, return it.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3189
     Otherwise, return a copy of the receiver, where some characters
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3190
     in the middle have been removed for a total string length
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3191
     of maxLen."
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3192
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3193
    |sz n1 n2|
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3194
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3195
    (sz := self size) <= maxLen ifTrue:[ ^ self ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3196
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3197
    n1 := n2 := maxLen // 2.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3198
    maxLen odd ifTrue:[
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3199
	n2 := n1 + 1
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3200
    ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3201
    ^ (self copyFrom:1 to:n1) , (self copyFrom:sz - n2 + 1)
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3202
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3203
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3204
     '12345678901234'   chopTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3205
     '123456789012345'  chopTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3206
     '1234567890123456' chopTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3207
     'aShortString' chopTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3208
     'aVeryLongNameForAStringThatShouldBeShortened' chopTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3209
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3210
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3211
    "Modified: / 24-10-2006 / 12:32:01 / cg"
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3212
!
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3213
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3214
concatenate:string1 and:string2
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3215
    "return the concatenation of myself and the arguments, string1 and string2.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3216
     This is equivalent to self , string1 , string2
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3217
     - 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
  3218
     is known to be a string."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3219
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3220
    ^ self , string1 , string2
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3221
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3222
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3223
concatenate:string1 and:string2 and:string3
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3224
    "return the concatenation of myself and the string arguments.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3225
     This is equivalent to self , string1 , string2 , string3
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3226
     - 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
  3227
     is known to be a string."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3228
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3229
    ^ self , string1 , string2 , string3
8040
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3230
!
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3231
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3232
contractAtBeginningTo:maxLen
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3233
    "if the receivers size is less or equal to maxLen, return it.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3234
     Otherwise, return a copy of the receiver, where some characters
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3235
     at the beginning have been replaced by '...' for a total string length
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3236
     of maxLen. Can be used to abbreviate long entries in tables."
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3237
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3238
    |sz|
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3239
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3240
    (sz := self size) <= maxLen ifTrue:[ ^ self ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3241
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3242
    ^ '...' , (self copyFrom:(sz - (maxLen - 4)))
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3243
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3244
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3245
     '12345678901234' contractAtBeginningTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3246
     '123456789012345' contractAtBeginningTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3247
     '1234567890123456' contractAtBeginningTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3248
     'aShortString' contractAtBeginningTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3249
     'aVeryLongNameForAStringThatShouldBeShortened' contractAtBeginningTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3250
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3251
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3252
    "Modified: / 24-10-2006 / 12:32:13 / cg"
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3253
!
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3254
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3255
contractAtEndTo:maxLen
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3256
    "if the receivers size is less or equal to maxLen, return it.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3257
     Otherwise, return a copy of the receiver, where some characters
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3258
     at the end have been replaced by '...' for a total string length
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3259
     of maxLen. Can be used to abbreviate long entries in tables."
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3260
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3261
    |sz|
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3262
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3263
    (sz := self size) <= maxLen ifTrue:[ ^ self ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3264
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3265
    ^ (self copyTo:maxLen-3),'...'
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3266
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
     '12345678901234' contractAtEndTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3269
     '123456789012345' contractAtEndTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3270
     '1234567890123456' contractAtEndTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3271
     'aShortString' contractAtEndTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3272
     'aVeryLongNameForAStringThatShouldBeShortened' contractAtEndTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3273
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3274
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3275
    "Modified: / 24-10-2006 / 12:32:26 / cg"
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
contractLeftTo:maxLen
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3279
    "if the receivers size is less or equal to maxLen, return it.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3280
     Otherwise, return a copy of the receiver, where some characters
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3281
     near the first quarter have been replaced by '...' for a total string length
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3282
     of maxLen.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3283
     Very similar to contractTo:, but better to abbreviate long filename entries,
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3284
     where the right part is of more use than the left."
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3285
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3286
    |sz "{ SmallInteger }"
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3287
     halfSize quarterSize "{ SmallInteger }"
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3288
     leftEnd rightEnd rightStart|
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3289
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3290
    (sz := self size) <= maxLen ifTrue:[ ^ self ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3291
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3292
    halfSize := maxLen // 2.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3293
    quarterSize := maxLen // 4.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3294
    leftEnd := quarterSize-1.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3295
    rightEnd := maxLen - leftEnd - 3.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3296
    rightStart := sz - rightEnd + 1.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3297
    ^ (self copyTo:leftEnd),'...',(self copyFrom:rightStart)
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3298
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3299
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3300
     '12345678901234' contractLeftTo:15
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3301
     '123456789012345' contractLeftTo:15
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3302
     '1234567890123456' contractLeftTo:15
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3303
     'aShortString' contractLeftTo:15
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3304
     'aVeryLongNameForAStringThatShouldBeShortened' contractLeftTo:15
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3305
     '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
  3306
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3307
!
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
contractTo:maxLen
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3310
    "if the receivers size is less or equal to maxLen, return it.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3311
     Otherwise, return a copy of the receiver, where some characters
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3312
     in the middle have been replaced by '...' for a total string length
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3313
     of maxLen. Can be used to abbreviate long entries in tables."
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3314
13362
ee643208df42 changed: #contractTo:
Claus Gittinger <cg@exept.de>
parents: 13344
diff changeset
  3315
    |sz "{ SmallInteger }" leftSize rightSize|
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3316
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3317
    (sz := self size) <= maxLen ifTrue:[ ^ self ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3318
13362
ee643208df42 changed: #contractTo:
Claus Gittinger <cg@exept.de>
parents: 13344
diff changeset
  3319
    rightSize := maxLen // 2.
ee643208df42 changed: #contractTo:
Claus Gittinger <cg@exept.de>
parents: 13344
diff changeset
  3320
    leftSize := maxLen - rightSize.
13822
8c2b90928dd9 contractTo:
Claus Gittinger <cg@exept.de>
parents: 13633
diff changeset
  3321
    leftSize := leftSize - 2.
8c2b90928dd9 contractTo:
Claus Gittinger <cg@exept.de>
parents: 13633
diff changeset
  3322
    rightSize := rightSize - 1.
13362
ee643208df42 changed: #contractTo:
Claus Gittinger <cg@exept.de>
parents: 13344
diff changeset
  3323
    ^ (self copyTo:leftSize),'...',(self copyFrom:(sz+1-rightSize))
ee643208df42 changed: #contractTo:
Claus Gittinger <cg@exept.de>
parents: 13344
diff changeset
  3324
ee643208df42 changed: #contractTo:
Claus Gittinger <cg@exept.de>
parents: 13344
diff changeset
  3325
    "
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3326
     '12345678901234' contractTo:15
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3327
     '123456789012345' contractTo:15
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3328
     '1234567890123456' contractTo:15
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3329
     '12345678901234567' contractTo:15
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3330
     '123456789012345678' contractTo:15
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3331
     'aShortString' contractTo:15
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3332
     'aVeryLongNameForAStringThatShouldBeShortened' contractTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3333
     'C:\Dokumente und Einstellungen\cg\work\bosch\dapas\hw_schnittstellen\DAPAS__HpibDLL.st' contractTo:40
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3334
     ('1234567890123456789012345678901234567' contractTo:30) size
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3335
     ('1234567890123456789012345678901234567' contractTo:29) size
13362
ee643208df42 changed: #contractTo:
Claus Gittinger <cg@exept.de>
parents: 13344
diff changeset
  3336
    "
ee643208df42 changed: #contractTo:
Claus Gittinger <cg@exept.de>
parents: 13344
diff changeset
  3337
13822
8c2b90928dd9 contractTo:
Claus Gittinger <cg@exept.de>
parents: 13633
diff changeset
  3338
    "Modified (comment): / 24-11-2011 / 19:17:46 / cg"
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3339
!
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3340
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3341
copyReplaceString:subString withString:newString
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3342
    "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
  3343
     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
  3344
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3345
    |tmpStream idx idx1|
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3346
11348
366457915f90 care for wide-character strings in copyReplaceStringWithString
Claus Gittinger <cg@exept.de>
parents: 11345
diff changeset
  3347
    tmpStream := CharacterWriteStream on:(self class new).
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3348
    idx := 1.
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3349
    [idx ~~ 0] whileTrue:[
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3350
	idx1 := idx.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3351
	idx := self indexOfSubCollection:subString startingAt:idx.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3352
	idx ~~ 0 ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3353
	    tmpStream nextPutAll:(self copyFrom:idx1 to:idx-1).
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3354
	    tmpStream nextPutAll:newString.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3355
	    idx := idx + subString size
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3356
	]
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3357
    ].
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3358
    tmpStream nextPutAll:(self copyFrom:idx1).
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3359
    ^ tmpStream contents
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3360
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3361
   "
9306
de9b438212b8 comment
Stefan Vogel <sv@exept.de>
parents: 9282
diff changeset
  3362
     '12345678901234567890' copyReplaceString:'123' withString:'OneTwoThree'
de9b438212b8 comment
Stefan Vogel <sv@exept.de>
parents: 9282
diff changeset
  3363
     '12345678901234567890' copyReplaceString:'123' withString:'*'
de9b438212b8 comment
Stefan Vogel <sv@exept.de>
parents: 9282
diff changeset
  3364
     '12345678901234567890' copyReplaceString:'234' withString:'foo'
de9b438212b8 comment
Stefan Vogel <sv@exept.de>
parents: 9282
diff changeset
  3365
de9b438212b8 comment
Stefan Vogel <sv@exept.de>
parents: 9282
diff changeset
  3366
     ('a string with spaces' copyReplaceAll:$  withAll:' foo ')
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3367
	copyReplaceString:'foo' withString:'bar'
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3368
    "
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3369
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3370
    "Modified: / 31-05-1999 / 12:33:59 / cg"
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3371
    "Created: / 12-05-2004 / 12:00:00 / cg"
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3372
!
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3373
8040
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3374
copyWith:aCharacter
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3375
    "return a new string containing the receivers characters
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3376
     and the single new character, aCharacter.
8040
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3377
     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
  3378
     as argument, but equivalent to copy-and-addLast.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3379
     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
  3380
     (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
  3381
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3382
    |sz newString|
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3383
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3384
    aCharacter bitsPerCharacter > self bitsPerCharacter ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3385
	sz := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3386
	newString := aCharacter stringSpecies new:sz + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3387
	newString replaceFrom:1 to:sz with:self startingAt:1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3388
	newString at:sz+1 put:aCharacter.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3389
	^ newString.
8040
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3390
    ].
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3391
    ^ super copyWith:aCharacter
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3392
! !
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3393
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3394
!CharacterArray methodsFor:'displaying'!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3395
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3396
displayOn:aGC x:x y:y from:start to:stop
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3397
    "display the receiver on a GC"
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3398
12171
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  3399
    self displayOn:aGC x:x y:y from:start to:stop opaque:false
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  3400
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  3401
    "Modified: 12.5.1996 / 12:49:33 / cg"
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  3402
!
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  3403
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  3404
displayOn:aGC x:x y:y from:start to:stop opaque:opaque
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  3405
    "display the receiver on a GC"
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  3406
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3407
    "q&d hack"
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3408
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3409
    (start == 1 and:[stop == self size]) ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3410
	self displayOn:aGC x:x y:y opaque:opaque.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3411
    ] ifFalse:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3412
	(self copyFrom:start to:stop) displayOn:aGC x:x y:y opaque:opaque.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3413
    ].
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3414
!
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3415
7082
675482728016 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7022
diff changeset
  3416
displayOn:aGc x:x y:y opaque:opaque
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3417
    "display the receiver in a graphicsContext - this method allows
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3418
     strings to be used like DisplayObjects."
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3419
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3420
    |s|
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3421
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3422
    s := self string.
7082
675482728016 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7022
diff changeset
  3423
    opaque ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3424
	aGc displayOpaqueString:s x:x y:y.
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3425
    ] ifFalse:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3426
	aGc displayString:s x:x y:y.
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3427
    ].
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  3428
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  3429
    "Modified: 11.5.1996 / 14:42:48 / cg"
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  3430
!
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  3431
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3432
displayOpaqueOn:aGC x:x y:y from:start to:stop
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3433
    "display the receiver on a GC"
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3434
12171
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  3435
    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
  3436
! !
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3437
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3438
!CharacterArray methodsFor:'emphasis'!
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3439
11632
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3440
actionForAll:aBlock
12326
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  3441
    "change the action block of all characters.
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  3442
     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
  3443
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3444
    ^ self asText actionForAll:aBlock
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3445
!
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3446
5732
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3447
allBold
12326
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  3448
    "return a text object representing the receiver, but all boldified"
5732
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3449
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3450
    "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
  3451
    Text isNil ifTrue:[^ self].
5732
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3452
    ^ self asText allBold
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3453
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3454
    "
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3455
     Transcript showCR:'hello' asText allBold
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3456
     Transcript showCR:'hello' allBold
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3457
    "
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3458
!
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3459
5898
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3460
allItalic
12326
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  3461
    "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
  3462
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3463
    "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
  3464
    Text isNil ifTrue:[^ self].
5898
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3465
    ^ self asText allItalic
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3466
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3467
    "
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3468
     Transcript showCR:'hello' asText allItalic
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3469
     Transcript showCR:'hello' allItalic
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3470
    "
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3471
!
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3472
11345
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3473
allStrikedOut
12326
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  3474
    "return a text object representing the receiver, but all in strikeout"
11345
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3475
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3476
    "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
  3477
    Text isNil ifTrue:[^ self].
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3478
    ^ self asText allStrikedOut
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3479
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3480
    "
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3481
     Transcript showCR:'hello' asText allStrikedOut
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3482
     Transcript showCR:'hello' allStrikedOut
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3483
    "
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3484
!
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3485
10862
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3486
allUnderlined
12326
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  3487
    "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
  3488
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3489
    "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
  3490
    Text isNil ifTrue:[^ self].
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3491
    ^ self asText allUnderlined
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3492
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3493
    "
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3494
     Transcript showCR:'hello' asText allUnderlined
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3495
     Transcript showCR:'hello' allUnderlined
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3496
    "
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3497
!
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3498
6228
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3499
colorizeAllWith:aColor
12326
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  3500
    "return a text object representing the receiver, but all colorized"
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  3501
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  3502
    "this test allows for small non-gui apps to be built without libbasic2 (where Text is)"
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  3503
    Text isNil ifTrue:[^ self].
6228
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3504
    ^ self asText colorizeAllWith:aColor
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3505
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3506
    "
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3507
     Transcript showCR:('hello' colorizeAllWith:Color red)
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3508
     Transcript showCR:('world' colorizeAllWith:Color green darkened)
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3509
    "
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3510
!
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3511
12330
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  3512
colorizeAllWith:fgColor on:bgColor
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  3513
    "return a text object representing the receiver, but all colorized with
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  3514
     both fg and background color"
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  3515
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  3516
    "this test allows for small non-gui apps to be built without libbasic2 (where Text is)"
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  3517
    Text isNil ifTrue:[^ self].
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  3518
    ^ self asText colorizeAllWith:fgColor on:bgColor
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  3519
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  3520
    "
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  3521
     Transcript showCR:('hello' colorizeAllWith:Color red on:Color yellow)
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  3522
     Transcript showCR:('world' colorizeAllWith:Color red)
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  3523
    "
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  3524
!
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  3525
1396
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3526
emphasis
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3527
    "return the emphasis.
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3528
     Since characterArrays do not hold any emphasis information,
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3529
     nil (no emphasis) is returned here."
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3530
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3531
    ^ RunArray new:self size withAll:nil
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3532
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3533
    "Created: 14.5.1996 / 13:58:58 / cg"
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3534
!
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3535
6655
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3536
emphasis:emphasisCollection
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3537
    ^ self asText emphasis:emphasisCollection
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3538
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3539
    "
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3540
     Transcript showCR:('hello' emphasis:#(bold bold bold bold bold))
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3541
    "
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3542
!
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3543
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3544
emphasisAt:characterIndex
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3545
    "return the emphasis at some index.
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3546
     Since characterArrays do not hold any emphasis information,
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3547
     nil (no emphasis) is returned here."
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3548
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3549
    ^ nil
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3550
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3551
    "Created: 11.5.1996 / 14:13:27 / cg"
1396
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3552
!
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3553
11632
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3554
emphasisAtPoint:aPoint on:aGC
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3555
    "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
  3556
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3557
    ^ nil
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3558
!
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3559
1396
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3560
emphasisCollection
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3561
    "return the emphasis.
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3562
     Since characterArrays do not hold any emphasis information,
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3563
     nil (no emphasis) is returned here."
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3564
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3565
    ^ RunArray new:(self size)
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3566
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3567
    "Created: 14.5.1996 / 13:58:58 / cg"
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3568
    "Modified: 14.5.1996 / 15:02:29 / cg"
3404
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  3569
!
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  3570
11919
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3571
emphasiseFrom:start to:stop with:newEmphasis
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3572
    "set to the emphasis within some range. return the receiver"
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3573
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3574
    ^ self asText emphasiseFrom:start to:stop with:newEmphasis
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3575
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3576
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3577
     'hello' emphasiseFrom:2 with:#italic
11919
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3578
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3579
     Transcript showCR:('hello' emphasiseFrom:2 with:#italic)
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3580
    "
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3581
!
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3582
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3583
emphasiseFrom:start with:newEmphasis
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3584
    "set to the emphasis within some range. return the receiver"
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3585
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3586
    ^ self emphasiseFrom:start to:(self size) with:newEmphasis
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3587
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3588
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3589
     'hello' emphasiseFrom:2 with:#italic
11919
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3590
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3591
     Transcript showCR:('hello' emphasiseFrom:2 with:#italic)
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3592
    "
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3593
!
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  3594
3404
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  3595
emphasizeAllWith:emphasis
12326
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  3596
    "return a text object representing the receiver, but all emphasized"
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  3597
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  3598
    "this test allows for small non-gui apps to be built without libbasic2 (where Text is)"
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  3599
    Text isNil ifTrue:[^ self].
3404
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  3600
    ^ self asText emphasizeAllWith:emphasis
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  3601
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  3602
    "
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  3603
     Transcript showCR:('hello' emphasizeAllWith:#bold)
3599
fea09a812f55 comment
Claus Gittinger <cg@exept.de>
parents: 3578
diff changeset
  3604
     Transcript showCR:('hello' emphasizeAllWith:(#color -> Color red))
fea09a812f55 comment
Claus Gittinger <cg@exept.de>
parents: 3578
diff changeset
  3605
     Transcript showCR:('hello' emphasizeAllWith:(#color -> Color red))
fea09a812f55 comment
Claus Gittinger <cg@exept.de>
parents: 3578
diff changeset
  3606
    "
fea09a812f55 comment
Claus Gittinger <cg@exept.de>
parents: 3578
diff changeset
  3607
fea09a812f55 comment
Claus Gittinger <cg@exept.de>
parents: 3578
diff changeset
  3608
    "Modified: / 17.6.1998 / 12:51:44 / cg"
5097
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3609
!
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3610
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3611
makeSelectorBoldIn:aClass
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3612
    "the receiver represents some source code for
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3613
     a method in aClass.
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3614
     Change myself to boldify the selector.
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3615
     Not yet implemented (could easily use the syntaxHighlighter
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3616
     for this ...)"
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3617
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3618
    ^ self
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3619
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3620
    "Modified: / 13.12.1999 / 21:49:11 / cg"
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3621
    "Created: / 13.12.1999 / 21:49:24 / cg"
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  3622
!
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  3623
12396
0f75aad3a34c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12343
diff changeset
  3624
withoutBackgroundColorEmphasis
0f75aad3a34c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12343
diff changeset
  3625
    ^ self
0f75aad3a34c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12343
diff changeset
  3626
!
0f75aad3a34c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12343
diff changeset
  3627
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  3628
withoutEmphasis:emphasisToRemove
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  3629
    ^ self
12396
0f75aad3a34c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12343
diff changeset
  3630
!
0f75aad3a34c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12343
diff changeset
  3631
0f75aad3a34c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12343
diff changeset
  3632
withoutForegroundColorEmphasis
0f75aad3a34c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12343
diff changeset
  3633
    ^ self
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3634
! !
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3635
7265
3b007758ff5b method category rename
Claus Gittinger <cg@exept.de>
parents: 7261
diff changeset
  3636
!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
  3637
12767
17d2c7268065 Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12679
diff changeset
  3638
decodeAsLiteralArray
17d2c7268065 Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12679
diff changeset
  3639
    "given a literalEncoding in the receiver,
17d2c7268065 Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12679
diff changeset
  3640
     create & return the corresponding object.
17d2c7268065 Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12679
diff changeset
  3641
     The inverse operation to #literalArrayEncoding."
17d2c7268065 Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12679
diff changeset
  3642
17d2c7268065 Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12679
diff changeset
  3643
    ^ self
17d2c7268065 Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12679
diff changeset
  3644
!
17d2c7268065 Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12679
diff changeset
  3645
991
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
  3646
decodeFrom:encodingSymbol
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3647
    "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
  3648
     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
  3649
ca774158b317 code cleanup (removed old obsolete encoding stuff)
Claus Gittinger <cg@exept.de>
parents: 8102
diff changeset
  3650
    |myEncoding encoder|
7950
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  3651
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  3652
    encodingSymbol isNil ifTrue:[^ self].
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  3653
    myEncoding := self encoding.
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  3654
    encodingSymbol == myEncoding ifTrue:[^ self].
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  3655
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  3656
    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
  3657
    encoder isNil ifTrue:[^ self].
ca774158b317 code cleanup (removed old obsolete encoding stuff)
Claus Gittinger <cg@exept.de>
parents: 8102
diff changeset
  3658
    ^ 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
  3659
!
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
  3660
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3661
encodeFrom:oldEncoding into:newEncoding
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3662
    ^ CharacterEncoder encodeString:self from:oldEncoding into:newEncoding
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3663
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3664
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3665
rot13
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3666
     "Usenet: from `rotate alphabet 13 places']
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3667
      The simple Caesar-cypher encryption that replaces each English
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3668
      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
  3669
      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
  3670
      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
  3671
      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
  3672
      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
  3673
      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
  3674
      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
  3675
11865
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  3676
    ^ self rot:13
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3677
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3678
    "
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3679
     'hello world' rot13
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3680
     'hello world' rot13 rot13
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3681
    "
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3682
!
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3683
11865
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  3684
rot:n
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  3685
     "Usenet: from `rotate alphabet N places']
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  3686
      The simple Caesar-cypher encryption that replaces each English
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  3687
      letter with the one N places forward or back along the alphabet,
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  3688
      so that 'The butler did it!!' becomes 'Gur ohgyre qvq vg!!' by rot 13
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  3689
      Most Usenet news reading and posting programs include a rot13 feature.
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  3690
      It is used to enclose the text in a sealed wrapper that the reader must choose
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  3691
      to open -- e.g., for posting things that might offend some readers, or spoilers.
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  3692
      A major advantage of rot13 over rot(N) for other N is that it
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  3693
      is self-inverse, so the same code can be used for encoding and decoding."
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  3694
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  3695
    ^ self species
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3696
	streamContents:[:aStream |
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3697
	    self do:[:char |
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3698
		aStream nextPut:(char rot:n) ]]
11865
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  3699
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  3700
    "
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  3701
     'hello world' rot:13
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  3702
     ('hello world' rot:13) rot:13
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  3703
    "
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  3704
!
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  3705
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3706
utf8Decoded
7950
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  3707
    "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
  3708
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3709
    |in out is16Bit c|
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3710
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3711
    is16Bit := false.
11326
11ce7ae19315 changed #utf8Decoded - use CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 11320
diff changeset
  3712
    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
  3713
    in := self readStream.
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3714
    [in atEnd] whileFalse:[
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3715
	c := Character utf8DecodeFrom:in.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3716
	out nextPut:c.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3717
    ].
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3718
    ^ out contents
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3719
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3720
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3721
     #[16rC8 16rA0] asString utf8Decoded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3722
     (Character value:16r220) utf8Encoded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3723
     (Character value:16r220) utf8Encoded utf8Decoded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3724
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3725
     (Character value:16r800) utf8Encoded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3726
     (Character value:16r220) utf8Encoded utf8Decoded
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3727
    "
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3728
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3729
    "test:
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3730
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3731
      |utf8Encoding original readBack|
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3732
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3733
      1 to:16rFFFF do:[:ascii |
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3734
	original := (Character value:ascii) asString.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3735
	utf8Encoding := original utf8Encoded.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3736
	readBack := utf8Encoding utf8Decoded.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3737
	readBack = original ifFalse:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3738
	    self halt
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3739
	]
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3740
      ]
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3741
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3742
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3743
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3744
utf8DecodedWithTwoByteCharactersReplacedBy:replacementCharacter
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3745
    "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
  3746
     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
  3747
     and replace them with replacementCharacter"
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3748
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3749
    |in out c|
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3750
8222
f2c454a9a038 replaced '' writeStream by String writeStream
Claus Gittinger <cg@exept.de>
parents: 8124
diff changeset
  3751
    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
  3752
    in := self readStream.
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3753
    [in atEnd] whileFalse:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3754
	c := Character utf8DecodeFrom:in.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3755
	c codePoint > 16rFF ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3756
	    c := replacementCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3757
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3758
	out nextPut:c.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3759
    ].
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3760
    ^ out contents
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3761
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3762
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3763
     (Character value:16r220) utf8Encoded
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3764
	utf8DecodedWithTwoByteCharactersReplacedBy:(Character space)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3765
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3766
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3767
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3768
utf8Encoded
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3769
    "Return my UTF-8 representation as a new String"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3770
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3771
    |s|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3772
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3773
    s := WriteStream on:(String uninitializedNew:self size).
11320
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  3774
    s nextPutAllUtf8:self.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3775
    ^ s contents
11320
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  3776
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  3777
    "
12925
5c0a9a633ca1 comment/format in: #utf8Encoded
Claus Gittinger <cg@exept.de>
parents: 12912
diff changeset
  3778
     'abcdeäöüß' utf8Encoded
5c0a9a633ca1 comment/format in: #utf8Encoded
Claus Gittinger <cg@exept.de>
parents: 12912
diff changeset
  3779
    "
5c0a9a633ca1 comment/format in: #utf8Encoded
Claus Gittinger <cg@exept.de>
parents: 12912
diff changeset
  3780
5c0a9a633ca1 comment/format in: #utf8Encoded
Claus Gittinger <cg@exept.de>
parents: 12912
diff changeset
  3781
    "Modified: / 11-05-2010 / 19:12:37 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3782
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3783
11345
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3784
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3785
!CharacterArray methodsFor:'matching - glob expressions'!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3786
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3787
compoundMatch:aString
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3788
    "like match, but the receiver may be a compound match pattern,
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  3789
     consisting of multiple simple GLOB patterns, separated by semicolons.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3790
     This is usable with fileName pattern fields.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3791
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3792
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3793
	     NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  3794
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3795
     NOTICE: the receiver is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3796
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3797
    ^self compoundMatch:aString ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3798
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3799
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3800
     'f*' match:'foo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3801
     'b*' match:'foo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3802
     'f*;b*' match:'foo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3803
     'f*;b*' match:'bar'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3804
     'f*;b*' compoundMatch:'foo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3805
     'f*;b*' compoundMatch:'bar'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3806
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3807
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3808
    "Modified: / 30.1.1998 / 11:40:18 / stefan"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3809
    "Modified: / 16.12.1999 / 01:22:08 / cg"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3810
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3811
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3812
compoundMatch:aString ignoreCase:ignoreCase
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3813
    "like match, but the receiver may be a compound match pattern,
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  3814
     consisting of multiple simple GLOB patterns, separated by semicolons.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3815
     This is usable with fileName pattern fields.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3816
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3817
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3818
	     NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  3819
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3820
     NOTICE: the receiver is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3821
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3822
    |matchers|
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3823
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3824
    matchers := self asCollectionOfSubstringsSeparatedBy:$;.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3825
    ^ matchers contains:[:aPattern |
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3826
	aPattern match:aString ignoreCase:ignoreCase escapeCharacter:nil
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3827
      ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3828
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3829
"/    matchers do:[:aPattern |
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3830
"/        (aPattern match:aString ignoreCase:ignoreCase) ifTrue:[^ true].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3831
"/    ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3832
"/    ^ false.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3833
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3834
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3835
     'f*' match:'foo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3836
     'b*' match:'foo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3837
     'f*;b*' match:'foo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3838
     'f*;b*' match:'bar'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3839
     'f*;b*' compoundMatch:'foo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3840
     'f*;b*' compoundMatch:'bar'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3841
     'f*;b*' compoundMatch:'Foo' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3842
     'f*;b*' compoundMatch:'Bar' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3843
     'f*;b*' compoundMatch:'ccc' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3844
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3845
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3846
    "Modified: / 15.4.1997 / 15:50:33 / cg"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3847
    "Modified: / 30.1.1998 / 11:40:18 / stefan"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3848
    "Created: / 16.12.1999 / 01:21:35 / cg"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3849
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3850
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3851
findMatchString:matchString
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  3852
    "like findString/indexOfSubCollection, but allowing GLOB match patterns.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3853
     find matchstring; if found, return the index;
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3854
     if not found, return 0.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3855
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3856
     NOTICE: match-meta character interpretation is like in unix-matching,
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3857
	     NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  3858
     NOTICE: this GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3859
     NOTICE: the argument is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3860
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3861
    ^ self findMatchString:matchString startingAt:1 ignoreCase:false ifAbsent:0
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3862
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3863
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3864
findMatchString:matchString startingAt:index
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  3865
    "like findString, but allowing GLOB match patterns.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3866
     find matchstring, starting at index. if found, return the index;
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3867
     if not found, return 0.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3868
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3869
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3870
	     NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  3871
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3872
     NOTICE: the argument is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3873
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3874
    ^ self findMatchString:matchString startingAt:index ignoreCase:false ifAbsent:0
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3875
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3876
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3877
findMatchString:matchString startingAt:index ignoreCase:ignoreCase ifAbsent:exceptionBlock
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  3878
    "like findString, but allowing GLOB match patterns.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3879
     find matchstring, starting at index. if found, return the index;
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3880
     if not found, return the result of evaluating exceptionBlock.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3881
     This is a q&d hack - not very efficient.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3882
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3883
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3884
	     NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  3885
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3886
     NOTICE: the argument is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3887
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3888
    |firstChar firstSet
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3889
     startIndex "{ Class: SmallInteger }"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3890
     matchSize  "{ Class: SmallInteger }"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3891
     mySize     "{ Class: SmallInteger }"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3892
     realMatchString lcChar ucChar|
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3893
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3894
    matchSize := matchString size.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3895
    matchSize == 0 ifTrue:[^ index]. "empty string matches"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3896
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3897
    realMatchString := matchString.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3898
    (realMatchString endsWith:$*) ifFalse:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3899
	realMatchString := realMatchString , '*'.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3900
	matchSize := matchSize + 1
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3901
    ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3902
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3903
    mySize := self size.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3904
    firstChar := realMatchString at:1.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3905
    firstChar == self class matchEscapeCharacter ifTrue:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3906
	firstChar := realMatchString at:2.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3907
    ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3908
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3909
    firstChar asString includesMatchCharacters ifTrue:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3910
	index to:mySize do:[:col |
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3911
	    (realMatchString match:self from:col to:mySize ignoreCase:ignoreCase)
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3912
	    ifTrue:[^ col]
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3913
	].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3914
	^ exceptionBlock value.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3915
    ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3916
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3917
    lcChar := firstChar asLowercase.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3918
    ucChar := firstChar asUppercase.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3919
    (ignoreCase and:[ lcChar ~= ucChar]) ifTrue:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3920
	firstSet := Array with:ucChar with:lcChar.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3921
	startIndex := self indexOfAny:firstSet startingAt:index.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3922
    ] ifFalse:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3923
	startIndex := self indexOf:firstChar startingAt:index.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3924
    ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3925
    [startIndex == 0] whileFalse:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3926
	(realMatchString match:self from:startIndex to:mySize ignoreCase:ignoreCase)
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3927
	ifTrue:[^ startIndex].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3928
	firstSet notNil ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3929
	    startIndex := self indexOfAny:firstSet startingAt:(startIndex + 1).
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3930
	] ifFalse:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3931
	    startIndex := self indexOf:firstChar startingAt:(startIndex + 1).
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3932
	].
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3933
    ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3934
    ^ exceptionBlock value
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3935
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3936
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3937
     'one two three four' findMatchString:'o[nu]'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3938
     'one two three four' findMatchString:'o[nu]' startingAt:3
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3939
     'one two three four one' findMatchString:'ONE' startingAt:3 ignoreCase:true ifAbsent:0
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3940
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3941
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3942
    "Modified: 13.9.1997 / 06:31:22 / cg"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3943
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3944
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3945
includesMatchString:matchString
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  3946
    "like includesString, but allowing GLOB match patterns.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3947
     find matchstring; if found, return true, otherwise return false.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3948
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3949
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3950
	     NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  3951
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3952
     NOTICE: the argument is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3953
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3954
    ^ (self findMatchString:matchString) ~~ 0
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3955
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3956
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3957
     'hello world' includesMatchString:'h*'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3958
     'hello world' includesMatchString:'h[aeiou]llo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3959
     'hello world' includesMatchString:'wor*'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3960
     'hello world' includesMatchString:'woR*'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3961
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3962
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3963
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3964
includesMatchString:matchString caseSensitive:caseSensitive
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  3965
    "like includesString, but allowing GLOB match patterns.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3966
     find matchstring; if found, return true, otherwise return false.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3967
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3968
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3969
	     NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  3970
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3971
     NOTICE: the argument is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3972
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3973
    ^ (self findMatchString:matchString startingAt:1 ignoreCase:caseSensitive not ifAbsent:0) ~~ 0
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3974
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3975
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3976
     'hello world' includesMatchString:'h*' caseSensitive:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3977
     'hello world' includesMatchString:'h*' caseSensitive:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3978
     'Hello world' includesMatchString:'h*' caseSensitive:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3979
     'Hello world' includesMatchString:'h*' caseSensitive:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3980
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3981
     'hello world' includesMatchString:'h[aeiou]llo' caseSensitive:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3982
     'hello world' includesMatchString:'h[aeiou]llo' caseSensitive:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3983
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3984
     'hello world' includesMatchString:'wor*' caseSensitive:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3985
     'hello world' includesMatchString:'wor*' caseSensitive:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3986
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3987
     'hello world' includesMatchString:'woR*' caseSensitive:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3988
     'hello world' includesMatchString:'woR*' caseSensitive:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3989
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3990
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3991
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3992
match:aString
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  3993
    "return true if aString matches self, where self may contain GLOB meta-match
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3994
     characters $* (to match any string) or $# (to match any character).
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3995
     or [...] to match a set of characters.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3996
     Lower/uppercase are considered different.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3997
     The escape character is the backQuote.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3998
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  3999
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4000
	     NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4001
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4002
     NOTICE: the receiver is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4003
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4004
    ^ self match:aString from:1 to:aString size ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4005
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4006
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4007
     '\*f*' match:'f'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4008
     '\*f*' match:'*f'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4009
     '*\*f*' match:'*f'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4010
     '*f*' match:'*f'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4011
     '*ute*' match:'computer'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4012
     '*uter' match:'computer'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4013
     'uter*' match:'computer'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4014
     '*ute*' match:''
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4015
     '[abcd]*' match:'computer'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4016
     '[abcd]*' match:'komputer'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4017
     '*some*compl*ern*' match:'this is some more complicated pattern match'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4018
     '*some*compl*ern*' match:'this is another complicated pattern match'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4019
     '*-hh' match:'anton-h'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4020
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4021
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4022
    "Modified: / 9.6.1998 / 18:50:00 / cg"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4023
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4024
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4025
match:aString escapeCharacter:escape
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4026
    "return true if aString matches self, where self may contain GLOB meta-match
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4027
     characters $* (to match any string) or $# (to match any character).
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4028
     or [...] to match a set of characters.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4029
     Lower/uppercase are considered different.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4030
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4031
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4032
	     NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4033
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4034
     NOTICE: the receiver is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4035
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4036
    ^ self match:aString from:1 to:aString size ignoreCase:false escapeCharacter:escape
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4037
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4038
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4039
     'a\b\c\*' match:'a\b\c\d'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4040
     'a\b\c\*' match:'a\b\c\d' escapeCharacter:nil
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4041
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4042
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4043
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4044
match:aString from:start to:stop ignoreCase:ignoreCase
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4045
    "return true if part of aString matches myself,
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4046
     where self may contain GLOB meta-match
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4047
     characters $* (to match any string) or $# (to match any character)
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4048
     or [...] to match a set of characters.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4049
     If ignoreCase is true, lower/uppercase are considered the same.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4050
     The escape character is the backQuote.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4051
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4052
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4053
	     NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4054
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4055
     NOTICE: the receiver is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4056
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4057
    ^ self
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4058
	match:aString from:start to:stop ignoreCase:ignoreCase
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4059
	escapeCharacter:(self class matchEscapeCharacter)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4060
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4061
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4062
     '*ute*' match:'12345COMPUTER' from:1 to:5 ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4063
     '*ute*' match:'12345COMPUTER' from:6 to:13 ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4064
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4065
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4066
    "Modified: / 10.11.1998 / 21:43:46 / cg"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4067
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4068
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4069
match:aString from:start to:stop ignoreCase:ignoreCase escapeCharacter:escape
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4070
    "return true if part of aString matches myself,
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4071
     where self may contain GLOB meta-match
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4072
     characters $* (to match any string) or $# (to match any character)
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4073
     or [...] to match a set of characters.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4074
     If ignoreCase is true, lower/uppercase are considered the same.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4075
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4076
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4077
	     NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4078
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4079
     NOTICE: the receiver is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4080
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4081
    |matchScanArray|
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4082
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4083
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4084
     keep the matchScanArray from the most recent match -
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4085
     avoids parsing the pattern over-and over if multiple searches
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4086
     are done with the same pattern.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4087
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4088
    (PreviousMatch notNil
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4089
    and:[PreviousMatch key = self]) ifTrue:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4090
	matchScanArray := PreviousMatch value
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4091
    ] ifFalse:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4092
	matchScanArray := self class matchScanArrayFrom:self escapeCharacter:escape.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4093
	matchScanArray isNil ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4094
	    'CharacterArray [info]: invalid matchpattern:''' infoPrint. self infoPrint. ''' comparing for equality.' infoPrintCR.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4095
	    ^ self = aString
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4096
"/            ^ false
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4097
	].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4098
	PreviousMatch := self -> matchScanArray.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4099
    ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4100
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4101
    ^ self class
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4102
	matchScan:matchScanArray
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4103
	from:1 to:matchScanArray size
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4104
	with:aString
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4105
	from:start to:stop
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4106
	ignoreCase:ignoreCase
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4107
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4108
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4109
     '*ute*' match:'12345COMPUTER' from:1 to:5 ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4110
     '*ute*' match:'12345COMPUTER' from:6 to:13 ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4111
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4112
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4113
    "Modified: / 10.11.1998 / 21:43:46 / cg"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4114
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4115
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4116
match:aString ignoreCase:ignoreCase
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4117
    "return true if aString matches self, where self may contain GLOB meta-match
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4118
     characters $* (to match any string) or $# (to match any character)
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4119
     or [...] to match a set of characters.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4120
     If ignoreCase is true, lower/uppercase are considered the same.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4121
     The escape character is the backQuote.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4122
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4123
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4124
	     NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4125
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4126
     NOTICE: the receiver is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4127
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4128
    ^ self match:aString from:1 to:aString size ignoreCase:ignoreCase
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4129
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4130
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4131
     '*ute*' match:'COMPUTER' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4132
     '*uter' match:'COMPUTER' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4133
     '[abcd]*' match:'computer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4134
     '[abcd]*' match:'Computer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4135
     '[a-k]*' match:'komputer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4136
     '[a-k]*' match:'zomputer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4137
     '[a-k]*' match:'Komputer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4138
     '[a-k]*' match:'Komputer' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4139
     '*some*compl*ern*' match:'this is some more complicated pattern match' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4140
     '*some*compl*ern*' match:'this is another complicated pattern match' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4141
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4142
     Time millisecondsToRun:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4143
	Symbol allInstancesDo:[:sym |
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4144
	    '[ab]*' match:sym ignoreCase:false
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4145
	]
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4146
     ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4147
     Time millisecondsToRun:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4148
	Symbol allInstancesDo:[:sym |
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4149
	    '*at:*' match:sym ignoreCase:false
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4150
	]
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4151
     ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4152
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4153
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4154
    "Modified: 2.4.1997 / 17:28:58 / cg"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4155
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4156
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4157
match:aString ignoreCase:ignoreCase escapeCharacter:escape
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4158
    "return true if aString matches self, where self may contain GLOB meta-match
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4159
     characters $* (to match any string) or $# (to match any character)
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4160
     or [...] to match a set of characters.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4161
     If ignoreCase is true, lower/uppercase are considered the same.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4162
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4163
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4164
	     NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4165
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4166
     NOTICE: the receiver is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4167
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4168
    ^ self match:aString from:1 to:aString size ignoreCase:ignoreCase escapeCharacter:escape
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4169
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4170
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4171
     '*ute*' match:'COMPUTER' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4172
     '*uter' match:'COMPUTER' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4173
     '[abcd]*' match:'computer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4174
     '[abcd]*' match:'Computer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4175
     '[a-k]*' match:'komputer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4176
     '[a-k]*' match:'zomputer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4177
     '[a-k]*' match:'Komputer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4178
     '[a-k]*' match:'Komputer' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4179
     '*some*compl*ern*' match:'this is some more complicated pattern match' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4180
     '*some*compl*ern*' match:'this is another complicated pattern match' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4181
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4182
     Time millisecondsToRun:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4183
	Symbol allInstancesDo:[:sym |
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4184
	    '[ab]*' match:sym ignoreCase:false
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4185
	]
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4186
     ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4187
     Time millisecondsToRun:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4188
	Symbol allInstancesDo:[:sym |
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4189
	    '*at:*' match:sym ignoreCase:false
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4190
	]
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4191
     ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4192
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4193
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4194
    "Modified: 2.4.1997 / 17:28:58 / cg"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4195
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4196
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4197
matches:aPatternString
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4198
    "return true if the receiver matches aString, where aPatternString may contain GLOB meta-match
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4199
     characters $* (to match any string) or $# (to match any character).
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4200
     or [...] to match a set of characters.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4201
     Lower/uppercase are considered different.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4202
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4203
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4204
	     NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4205
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4206
     NOTICE: the receiver is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4207
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4208
    ^ aPatternString match:self
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4209
! !
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4210
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4211
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4212
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4213
!CharacterArray methodsFor:'padded copying'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4214
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4215
centerPaddedTo:newSize
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4216
     "return a new string consisting of the receivers characters,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4217
     plus spaces up to length and center the receivers characters in
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4218
     the resulting string.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4219
     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
  4220
     the original receiver is returned unchanged."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4221
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4222
     ^ self centerPaddedTo:newSize with:(Character space)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4223
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4224
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4225
     'foo' centerPaddedTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4226
     123 printString centerPaddedTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4227
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4228
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4229
    "Created: 25.11.1995 / 10:53:57 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4230
!
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4231
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4232
centerPaddedTo:size with:padCharacter
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4233
    "return a new string of length size, which contains the receiver
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4234
     centered (i.e. padded on both sides).
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4235
     Characters are filled with padCharacter.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4236
     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
  4237
     the original receiver is returned unchanged."
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4238
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4239
    |len s|
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4240
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4241
    len := self size.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4242
    (len < size) ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4243
	s := self species new:size withAll:padCharacter.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4244
	s replaceFrom:(size - len) // 2  + 1 with:self.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4245
	^ s
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4246
    ]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4247
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4248
    "
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4249
     'foo' centerPaddedTo:11 with:$.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4250
     'fooBar' centerPaddedTo:5 with:$.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4251
     123 printString centerPaddedTo:10 with:$.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4252
     (' ' , 123 printString) centerPaddedTo:10 with:$.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4253
     (Float pi printString) centerPaddedTo:15 with:(Character space)
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4254
     (Float pi printString) centerPaddedTo:15 with:$-
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4255
     (' ' , Float pi class name) centerPaddedTo:15 with:$.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4256
    "
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4257
!
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4258
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4259
decimalPaddedTo:size and:afterPeriod at:decimalCharacter
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4260
    "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
  4261
     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
  4262
     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
  4263
     to be padded).
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4264
     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
  4265
     the original receiver is returned unchanged.
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4266
     (sounds complicated ? -> see examples below)."
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4267
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4268
    ^ self
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4269
	decimalPaddedTo:size
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4270
	and:afterPeriod
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4271
	at:decimalCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4272
	withLeft:(Character space)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4273
	right:$0
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4274
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4275
    "
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4276
     '123' decimalPaddedTo:10 and:3 at:$.      -> '   123    '
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4277
     '123' decimalPaddedTo:10 and:3 at:$.      -> '   123.000'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4278
     '123.' decimalPaddedTo:10 and:3 at:$.     -> '   123.000'
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4279
     '123.1' decimalPaddedTo:10 and:3 at:$.    -> '   123.100'
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4280
     '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
  4281
     '123.123' decimalPaddedTo:10 and:3 at:$.  -> '   123.123'
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4282
    "
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4283
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4284
    "Created: 23.12.1995 / 13:11:52 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4285
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4286
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4287
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
  4288
    "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
  4289
     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
  4290
     of the period.
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4291
     Characters on the left are filled with leftPadChar.
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4292
     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
  4293
     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
  4294
     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
  4295
     the original receiver is returned unchanged.
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4296
     (sounds complicated ? -> see examples below)."
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4297
5230
655c21ffe6cc care for negative size of rest-string when decimalPadding
Claus Gittinger <cg@exept.de>
parents: 5221
diff changeset
  4298
    |s idx n rest|
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4299
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4300
    idx := self indexOf:decimalCharacter.
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4301
    idx == 0 ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4302
	"/
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4303
	"/ 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
  4304
	"/
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4305
	rightPadChar isNil ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4306
	    s := self , (self species new:afterPeriod + 1 withAll:leftPadChar)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4307
	] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4308
	    s:= self , decimalCharacter asString , (self species new:afterPeriod withAll:rightPadChar).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4309
	].
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4310
    ] ifFalse:[
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4311
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4312
	"/ the number of after-decimalPoint characters
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4313
	n := self size - idx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4314
	rest := afterPeriod - n.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4315
	rest > 0 ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4316
	    s := (self species new:rest withAll:(rightPadChar ? leftPadChar)).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4317
	] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4318
	    s := ''
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4319
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4320
	s := self , s.
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4321
    ].
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4322
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4323
    ^ s leftPaddedTo:size with:leftPadChar
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4324
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4325
    "
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4326
     '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
  4327
     '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
  4328
     '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
  4329
     '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
  4330
     '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
  4331
     '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
  4332
    "
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4333
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4334
    "Modified: 23.12.1995 / 13:08:18 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4335
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4336
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4337
leftPaddedTo:size
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4338
    "return a new string of length size, which contains the receiver
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4339
     right-adjusted (i.e. padded on the left).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4340
     Characters on the left are filled with spaces.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4341
     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
  4342
     the original receiver is returned unchanged."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4343
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4344
    ^ self leftPaddedTo:size with:(Character space)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4345
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4346
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4347
     'foo' leftPaddedTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4348
     'fooBar' leftPaddedTo:5
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4349
     123 printString leftPaddedTo:10
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
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4352
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4353
paddedTo:newSize
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4354
     "return a new string consisting of the receivers characters,
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4355
     plus spaces up to length.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4356
     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
  4357
     the original receiver is returned unchanged."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4358
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4359
     ^ self paddedTo:newSize with:(Character space)
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4360
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4361
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4362
     'foo' paddedTo:10
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4363
     123 printString paddedTo:10
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4364
    "
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  4365
! !
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  4366
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4367
!CharacterArray methodsFor:'printing & storing'!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4368
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4369
article
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4370
    "return an article string for the receiver."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4371
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4372
    |firstChar|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4373
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4374
    firstChar := (self at:1) asLowercase.
5848
ef81d77ca1ad UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5843
diff changeset
  4375
    ((firstChar isVowel and:[firstChar ~~ $u]) or:[firstChar == $x]) ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4376
	^ 'an'
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4377
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4378
    ^ 'a'
5848
ef81d77ca1ad UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5843
diff changeset
  4379
ef81d77ca1ad UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5843
diff changeset
  4380
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4381
	'uboot' article.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4382
	'xmas' article.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4383
	'alarm' article.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4384
	'baby' article.
5848
ef81d77ca1ad UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5843
diff changeset
  4385
    "
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4386
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4387
8049
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  4388
basicStoreString
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  4389
    "return a String for storing myself"
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  4390
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  4391
    |s n index|
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  4392
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  4393
    n := self occurrencesOf:$'.
11320
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  4394
    n ~~ 0 ifTrue:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4395
	s := self class new:(n + 2 + self size).
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4396
	s at:1 put:$'.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4397
	index := 2.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4398
	self do:[:thisChar |
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4399
	    (thisChar == $') ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4400
		s at:index put:thisChar.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4401
		index := index + 1.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4402
	    ].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4403
	    s at:index put:thisChar.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4404
	    index := index + 1.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4405
	].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4406
	s at:index put:$'.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4407
	^ s
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4408
    ].
11320
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  4409
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4410
    ^ '''' , self , ''''
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4411
!
8049
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  4412
11774
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  4413
displayOn:aGCOrStream
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  4414
    "Compatibility
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  4415
     append a printed desription on some stream (Dolphin,  Squeak)
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  4416
     OR:
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  4417
     display the receiver in a graphicsContext at 0@0 (ST80).
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  4418
     This method allows for any object to be displayed in some view
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  4419
     (although the fallBack is to display its printString ...)"
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  4420
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  4421
    "/ what a kludge - Dolphin and Squeak mean: printOn: a stream;
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  4422
    "/ ST/X (and some old ST80's) mean: draw-yourself on a GC.
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  4423
    (aGCOrStream isStream or:[aGCOrStream == Transcript]) ifTrue:[
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  4424
	self storeOn:aGCOrStream.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  4425
	^ self
11774
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  4426
    ].
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  4427
    ^ super displayOn:aGCOrStream
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  4428
!
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  4429
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4430
printOn:aStream
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4431
    "print the receiver on aStream"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4432
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4433
    aStream nextPutAll:self
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4434
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4435
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4436
printString
13079
111e7e456648 Implement display with #displayOn: instead of #displayString
Stefan Vogel <sv@exept.de>
parents: 13073
diff changeset
  4437
    "return a string for printing - that's myself"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4438
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4439
    ^ self
3578
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4440
!
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4441
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4442
printWithQuotesDoubledOn:aStream
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4443
    "put the raw storeString of myself on aStream"
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4444
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4445
    self do:[:thisChar |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4446
	(thisChar == $') ifTrue:[aStream nextPut:thisChar].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4447
	aStream nextPut:thisChar
3578
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4448
    ]
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4449
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4450
    "Modified: / 15.6.1998 / 17:21:17 / cg"
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4451
    "Created: / 15.6.1998 / 17:22:13 / cg"
12171
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  4452
!
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  4453
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  4454
printfWith:arg1 with:arg2 with:arg3 with:arg4 with:arg5
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  4455
    "Format and print the receiver with <argI> formatted in C style,
12171
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  4456
     as specified in the Unix C-language manual page for printf(3).
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  4457
     Return the resulting string."
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  4458
12171
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  4459
    ^ self printf:(Array with:arg1 with:arg2 with:arg3 with:arg4 with:arg5)
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  4460
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  4461
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  4462
     Transcript showCR:('%d %05x %08o %b' printfWith:123 with:234 with:345 with:123)
12171
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  4463
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4464
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4465
11955
1230c6953d49 comments
Claus Gittinger <cg@exept.de>
parents: 11919
diff changeset
  4466
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4467
!CharacterArray methodsFor:'queries'!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4468
4429
564b0fd9168e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4410
diff changeset
  4469
bitsPerCharacter
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4470
    "return the underlying strings bitsPerCharacter
4429
564b0fd9168e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4410
diff changeset
  4471
     (i.e. is it a regular String or a TwoByteString)"
564b0fd9168e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4410
diff changeset
  4472
8457
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4473
    |string max|
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4474
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4475
    (string := self string) ~~ self ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4476
	^ string bitsPerCharacter
8457
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4477
    ].
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4478
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4479
    max := 8.
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4480
    self do:[:eachCharacter |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4481
	max := max max:(eachCharacter bitsPerCharacter)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4482
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4483
    ^ max
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4484
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4485
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4486
     'hello' bitsPerCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4487
     'hello' asText allBold bitsPerCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4488
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4489
!
8457
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4490
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4491
contains8BitCharacters
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4492
    "return true, if the underlying string contains 8BitCharacters (or widers)
8457
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4493
     (i.e. if it is non-ascii)"
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4494
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4495
    |string|
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4496
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4497
    (string := self string) ~~ self ifTrue:[
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4498
	^ string contains8BitCharacters
8457
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4499
    ].
8900
8b669296f3eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8899
diff changeset
  4500
    ^ self contains:[:aCharacter | aCharacter codePoint > 16r7F ].
8457
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4501
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4502
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4503
     'hello' contains8BitCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4504
     'hello' asText allBold contains8BitCharacters
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  4505
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4506
!
4429
564b0fd9168e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4410
diff changeset
  4507
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4508
continuesWith:aString startingAt:startIndex
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4509
    "return true, if the receiver beginning at startIndex
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4510
     contains the characters in aString."
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4511
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4512
    |sz  "{Class: SmallInteger }"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4513
     idx "{Class: SmallInteger }"|
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4514
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4515
    sz := aString size.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4516
    idx := startIndex.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4517
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4518
    1 to:sz do:[:i |
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4519
	(self at:idx) ~~ (aString at:i) ifTrue:[^ false].
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4520
	idx := idx + 1
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4521
    ].
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4522
    ^ true
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4523
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4524
    "
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4525
     'hello world' continuesWith:'world' startingAt:6
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4526
     'hello world' continuesWith:'world' startingAt:7
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4527
    "
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4528
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4529
    "Created: 12.5.1996 / 15:46:40 / cg"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4530
    "Modified: 26.7.1996 / 19:08:36 / cg"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4531
!
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4532
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4533
countWords
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4534
    "return the number of words, which are separated by separators"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4535
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4536
    |tally "{ Class: SmallInteger }"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4537
     start "{ Class: SmallInteger }"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4538
     mySize "{ Class: SmallInteger }"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4539
     stop ch|
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4540
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4541
    tally := 0.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4542
    start := 1.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4543
    mySize := self size.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4544
    [start <= mySize] whileTrue:[
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4545
	ch := self at:start.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4546
	ch isSeparator ifTrue:[
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4547
	    start := start + 1
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4548
	] ifFalse:[
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4549
	    stop := self indexOfSeparatorStartingAt:start.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4550
	    (stop == 0) ifTrue:[
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4551
		stop := mySize + 1
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4552
	    ].
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4553
	    tally := tally + 1.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4554
	    start := stop
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4555
	]
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4556
    ].
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4557
    ^ tally
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4558
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4559
    "
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4560
     'hello world isnt this nice' countWords'
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4561
    "
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4562
!
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4563
11788
eea1835a1b7b added #defaultElement
Stefan Vogel <sv@exept.de>
parents: 11774
diff changeset
  4564
defaultElement
eea1835a1b7b added #defaultElement
Stefan Vogel <sv@exept.de>
parents: 11774
diff changeset
  4565
    ^ Character space
eea1835a1b7b added #defaultElement
Stefan Vogel <sv@exept.de>
parents: 11774
diff changeset
  4566
!
eea1835a1b7b added #defaultElement
Stefan Vogel <sv@exept.de>
parents: 11774
diff changeset
  4567
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4568
encoding
1311
367f740d21e7 commentary
Claus Gittinger <cg@exept.de>
parents: 1308
diff changeset
  4569
    "return the strings encoding, as a symbol.
7982
0412a26c4621 encoding now unicode
Claus Gittinger <cg@exept.de>
parents: 7977
diff changeset
  4570
     Here, by default, we assume unicode-encoding.
0412a26c4621 encoding now unicode
Claus Gittinger <cg@exept.de>
parents: 7977
diff changeset
  4571
     Notice, that iso8859-1 is a true subset of unicode,
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4572
     and that singleByteStrings are therefore both unicode AND
7982
0412a26c4621 encoding now unicode
Claus Gittinger <cg@exept.de>
parents: 7977
diff changeset
  4573
     8859-1 encoded."
0412a26c4621 encoding now unicode
Claus Gittinger <cg@exept.de>
parents: 7977
diff changeset
  4574
0412a26c4621 encoding now unicode
Claus Gittinger <cg@exept.de>
parents: 7977
diff changeset
  4575
    ^ #'unicode'
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4576
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4577
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4578
hasChangeOfEmphasis
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4579
    ^ false
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4580
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  4581
    "Created: 12.5.1996 / 12:31:39 / cg"
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4582
!
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4583
7995
8ddbb403d67b +hasIcon and hasImage for LabelAndIcon compatibility
Claus Gittinger <cg@exept.de>
parents: 7991
diff changeset
  4584
hasIcon
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  4585
    "for LabelAndIcon compatibility"
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  4586
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4587
    ^ false
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
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4590
hasImage
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4591
    "for LabelAndIcon compatibility"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4592
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4593
    ^ false
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4594
!
7995
8ddbb403d67b +hasIcon and hasImage for LabelAndIcon compatibility
Claus Gittinger <cg@exept.de>
parents: 7991
diff changeset
  4595
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4596
heightOn:aGC
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4597
    "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
  4598
6528
cf4e93b8104b #on: -> #onDevice
Claus Gittinger <cg@exept.de>
parents: 6523
diff changeset
  4599
    ^ (aGC font onDevice:aGC device) heightOf:self
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4600
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4601
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4602
     'hello world' heightOn:(View new)
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4603
    "
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4604
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4605
    "Created: 12.5.1996 / 20:09:29 / cg"
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4606
    "Modified: 12.5.1996 / 20:32:05 / cg"
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4607
!
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4608
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  4609
isLowercaseFirst
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  4610
    "return true, if the first character is a lowercase character."
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  4611
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  4612
    ^ self size ~~ 0 and:[ self first isLowercase ]
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  4613
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  4614
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  4615
     'helloWorld' isLowercaseFirst
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  4616
     'HelloWorld' isLowercaseFirst
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  4617
    "
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  4618
!
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  4619
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  4620
isUppercaseFirst
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  4621
    "return true, if the first character is an uppercase character."
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  4622
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  4623
    ^ self size ~~ 0 and:[ self first isUppercase ]
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  4624
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  4625
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  4626
     'helloWorld' isUppercaseFirst
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  4627
     'HelloWorld' isUppercaseFirst
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  4628
    "
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  4629
!
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  4630
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4631
knownAsSymbol
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4632
    "for now, only single character strings are allowed as symbols.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4633
     This method is redefined in String."
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4634
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4635
    ^ false
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4636
!
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4637
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4638
leftIndent
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4639
    "if the receiver starts with spaces, return the number of spaces
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4640
     at the left - otherwise, return 0.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4641
     If the receiver consists of spaces only, return the receivers size."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4642
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4643
    |index "{Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4644
     end   "{Class: SmallInteger }"|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4645
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4646
    index := 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4647
    end := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4648
    [index <= end] whileTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4649
	(self at:index) isSeparator ifFalse:[^ index - 1].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4650
	index := index + 1
8350
d9aaa0c937cb +isValidSmalltalkIdentifier
Claus Gittinger <cg@exept.de>
parents: 8347
diff changeset
  4651
    ].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4652
    ^ end
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4653
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4654
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4655
     '    hello' leftIndent
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4656
     'foo      ' leftIndent
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4657
     '         ' leftIndent
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4658
    "
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4659
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4660
    "Modified: 20.4.1996 / 19:28:43 / cg"
8350
d9aaa0c937cb +isValidSmalltalkIdentifier
Claus Gittinger <cg@exept.de>
parents: 8347
diff changeset
  4661
!
d9aaa0c937cb +isValidSmalltalkIdentifier
Claus Gittinger <cg@exept.de>
parents: 8347
diff changeset
  4662
10437
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4663
nameSpaceSelectorParts
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4664
    "Answer the namespace and baseSelector parts of a namespace selector.
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4665
     Namespace selectors are those generated by sends from a method in a different
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4666
     namespace; they are prefixed by ':'<ns>'::'.
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4667
     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
  4668
     Experimental"
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4669
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4670
    |nsPart selPart idx|
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4671
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4672
    (self at:1) == $: ifFalse:[^ Array with:'' with:self].
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4673
    idx := self indexOf:$: startingAt:3.
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4674
    idx == 0 ifTrue:[^ Array with:'' with:self].
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4675
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4676
    (idx+2 > self size) ifTrue:[^ Array with:'' with:self].
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4677
    (self at:idx+1) == $: ifFalse:[^ Array with:'' with:self].
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4678
    nsPart := self copyFrom:2 to:idx-1.
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4679
    selPart := self copyFrom:idx+2.
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4680
    ^ Array with:nsPart with:selPart
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4681
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4682
    "test:
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4683
     self assert:('+' nameSpaceSelectorParts) = #('' '+').
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4684
     self assert:(':+' nameSpaceSelectorParts) = #('' ':+').
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4685
     self assert:(':Foo:+' nameSpaceSelectorParts) = #('' ':Foo:+').
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4686
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4687
     self assert:(':Foo::+' nameSpaceSelectorParts) = #('Foo' '+').
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4688
     self assert:(':Foo::bar:baz:' nameSpaceSelectorParts) = #('Foo' 'bar:baz:').
10437
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4689
    "
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4690
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4691
    "Created: / 05-03-2007 / 17:16:58 / cg"
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4692
    "Modified: / 06-03-2007 / 11:51:15 / cg"
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4693
!
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4694
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4695
stringSpecies
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4696
    "return the underlying strings bitsPerCharacter
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  4697
     (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
  4698
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  4699
    |string|
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  4700
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  4701
    (string := self string) == self ifTrue:[^ self class].
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  4702
    ^ string stringSpecies
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  4703
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  4704
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4705
     'hello' stringSpecies
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4706
     'hello' asText allBold stringSpecies
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4707
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4708
!
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  4709
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4710
widthFrom:startIndex to:endIndex on:aGC
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4711
    "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
  4712
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4713
    ^ (aGC font onDevice:aGC device) widthOf:self from:startIndex to:endIndex
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4714
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4715
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4716
     'hello world' widthFrom:1 to:5 on:(View new)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4717
     'hello' widthOn:(View new)
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4718
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4719
!
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4720
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4721
widthOn:aGC
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4722
    "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
  4723
6528
cf4e93b8104b #on: -> #onDevice
Claus Gittinger <cg@exept.de>
parents: 6523
diff changeset
  4724
    ^ (aGC font onDevice:aGC device) widthOf:self
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4725
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4726
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4727
     'hello world' widthOn:(View new)
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4728
    "
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4729
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4730
    "Created: 12.5.1996 / 20:09:29 / cg"
2554
309ee6707322 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2551
diff changeset
  4731
    "Modified: 17.4.1997 / 12:50:23 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4732
! !
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4733
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4734
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4735
!CharacterArray methodsFor:'special string converting'!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4736
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4737
expandPlaceholdersWith:argArrayOrDictionary
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4738
    "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
  4739
     replaced by corresponding arguments' printStrings from the argArrayOrDictionary.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4740
     I.e. 'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this') results
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4741
     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
  4742
     As an extension, the argument may also be a dictionary, providing
7313
9be9b35f5370 comment
Claus Gittinger <cg@exept.de>
parents: 7312
diff changeset
  4743
     values for symbolic keys.
4842
0086acd80497 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  4744
     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
  4745
     (%1..%9 require a numeric key in the dictionary, however)
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4746
     To get a '%' character, use a '%%'-escape.
7313
9be9b35f5370 comment
Claus Gittinger <cg@exept.de>
parents: 7312
diff changeset
  4747
     To get an integer-indexed placeHolder followed by another digit,
9be9b35f5370 comment
Claus Gittinger <cg@exept.de>
parents: 7312
diff changeset
  4748
     or an index > 9, you must use %(digit).
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4749
     See also bindWith:... for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4750
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4751
    |stream|
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4752
12601
afe93f0d48c5 changed: #expandPlaceholdersWith:
Claus Gittinger <cg@exept.de>
parents: 12519
diff changeset
  4753
    stream := (TextStream ? WriteStream) on:(self species new:self size + 20).
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4754
    self expandPlaceholdersWith:argArrayOrDictionary on:stream.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4755
    ^ stream contents.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4756
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4757
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4758
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4759
     'hello %1' expandPlaceholdersWith:#('world')
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4760
     'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this')
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4761
     'hello %2; how is %1' expandPlaceholdersWith:#('world' 'this')
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4762
     '%1 plus %2 gives %3 ' expandPlaceholdersWith:#(4 5 9)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4763
     '%%(1)0 gives %(1)0' expandPlaceholdersWith:#(123)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4764
     '%%10 gives %10' expandPlaceholdersWith:#(123)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4765
     '%%(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
  4766
     '%test gives %1' expandPlaceholdersWith:#(123)
11028
cb1ee3ddd91a expandPlaceHolders: care fr Text with emphasis
Claus Gittinger <cg@exept.de>
parents: 11018
diff changeset
  4767
     'bla %1 bla' expandPlaceholdersWith:{ 'hello' allBold }
cb1ee3ddd91a expandPlaceHolders: care fr Text with emphasis
Claus Gittinger <cg@exept.de>
parents: 11018
diff changeset
  4768
     'bla %1 bla' expandPlaceholdersWith:{ 'hello' }
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4769
    "
1026
455c9f609f4d care for 16bit strings in expandPlaceHolders
Claus Gittinger <cg@exept.de>
parents: 1025
diff changeset
  4770
4410
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  4771
    "
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  4772
     |dict|
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  4773
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  4774
     dict := Dictionary new.
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  4775
     dict at:1 put:'one'.
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  4776
     dict at:$a put:'AAAAA'.
8794
a5df33935142 nindWith supports blocks in the value dictionary
Claus Gittinger <cg@exept.de>
parents: 8710
diff changeset
  4777
     dict at:$b put:[ Time now ].
12316
3e78905d70a9 comment/format in: #expandPlaceholdersWith:
Claus Gittinger <cg@exept.de>
parents: 12196
diff changeset
  4778
     dict at:'foo' put:[ Date today ].
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4779
     '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
  4780
    "
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  4781
2737
9f29aecea39d care for % at end in expandPlaceHolders.
Claus Gittinger <cg@exept.de>
parents: 2736
diff changeset
  4782
    "Modified: 1.7.1997 / 00:53:24 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4783
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4784
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4785
expandPlaceholdersWith:argArrayOrDictionary on:aStream
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4786
    "write the receiver to aStream, where all %i escapes are
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4787
     replaced by corresponding arguments' printStrings from the argArrayOrDictionary.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4788
     I.e. 'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this') results
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4789
     in the new string 'hello world; how is this'.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4790
     As an extension, the argument may also be a dictionary, providing
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4791
     values for symbolic keys.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4792
     In this case, %a .. %z and %(...) are also allowed.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4793
     (%1..%9 require a numeric key in the dictionary, however)
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4794
     To get a '%' character, use a '%%'-escape.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4795
     To get an integer-indexed placeHolder followed by another digit,
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4796
     or an index > 9, you must use %(digit).
10935
7142eab95639 #expandPlaceHoldersWith:in:
Stefan Vogel <sv@exept.de>
parents: 10929
diff changeset
  4797
     See also bindWith:... for VisualAge compatibility.
10939
d0ca31c1d1e9 #expandPlaceHoldersWith: handle %<cr> %<tab> etc
Stefan Vogel <sv@exept.de>
parents: 10935
diff changeset
  4798
     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
  4799
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4800
    |next v key
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4801
     idx   "{ SmallInteger }"
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4802
     idx2  "{ SmallInteger }"
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4803
     start "{ SmallInteger }"
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4804
     stop  "{ SmallInteger }"|
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4805
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4806
    stop := self size.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4807
    start := 1.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4808
    [start <= stop] whileTrue:[
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4809
	idx := self indexOf:$% startingAt:start.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4810
	(idx == 0 or:[idx == stop]) ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4811
	    aStream nextPutAll:self startingAt:start to:stop.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4812
	    ^ self.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4813
	].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4814
	"found a %"
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4815
	aStream nextPutAll:self startingAt:start to:(idx - 1).
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4816
	next := self at:(idx + 1).
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4817
	(next == $%) ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4818
	    aStream nextPut:$%.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4819
	] ifFalse:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4820
	    next == $< ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4821
		idx2 := self indexOf:$> startingAt:idx+2.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4822
		key := self copyFrom:idx+2 to:idx2-1.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4823
		idx := idx2 - 1.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4824
		key := key asSymbolIfInterned.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4825
		(#(cr tab nl return lf ff null) includesIdentical:key) ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4826
		    aStream nextPut:(Character perform:key).
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4827
		].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4828
	    ] ifFalse:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4829
		next isDigit ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4830
		    v := argArrayOrDictionary at:(next digitValue) ifAbsent:''
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4831
		] ifFalse:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4832
		    next == $( ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4833
			idx2 := self indexOf:$) startingAt:idx+2.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4834
			key := self copyFrom:idx+2 to:idx2-1.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4835
			idx := idx2 - 1.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4836
			(argArrayOrDictionary includesKey:key) ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4837
			    v := argArrayOrDictionary at:key
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4838
			] ifFalse:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4839
			    key := key asSymbolIfInterned ? key.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4840
			    (argArrayOrDictionary includesKey:key) ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4841
				v := argArrayOrDictionary at:key
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4842
			    ] ifFalse:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4843
				(key size == 1 and:[ argArrayOrDictionary includesKey:(key at:1)]) ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4844
				    v := argArrayOrDictionary at:(key at:1)
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4845
				] ifFalse:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4846
				    key isNumeric ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4847
					key := Integer readFrom:key onError:nil.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4848
				    ].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4849
				    v := argArrayOrDictionary at:key ifAbsent:''
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4850
				]
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4851
			    ].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4852
			].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4853
		    ] ifFalse:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4854
			(next isLetter and:[argArrayOrDictionary isSequenceable not "is a Dictionary"]) ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4855
			    "so next is a non-numeric single character."
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4856
			    v := argArrayOrDictionary
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4857
				    at:next
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4858
				    ifAbsent:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4859
					"try symbol instead of character"
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4860
					argArrayOrDictionary
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4861
					    at:next asSymbol
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4862
					    ifAbsent:[String with:$% with:next].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4863
				 ].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4864
			] ifFalse:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4865
			    v := String with:$% with:next.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4866
			].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4867
		    ]
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4868
		].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4869
		"/ v notNil ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4870
		    v isBlock ifTrue:[
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4871
			v := v value
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4872
		    ].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4873
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4874
		    v printOn:aStream.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4875
		"/ ].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4876
	    ]
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4877
	].
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4878
	start := idx + 2
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4879
    ].
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4880
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4881
    "
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4882
     String streamContents:[:s|
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4883
	'hello %1' expandPlaceholdersWith:#('world') on:s.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4884
	s cr.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4885
	'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this') on:s.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4886
	s cr.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4887
	'hello %2; how is %1' expandPlaceholdersWith:#('world' 'this') on:s.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4888
	s cr.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4889
	'%1 plus %2 gives %3 ' expandPlaceholdersWith:#(4 5 9) on:s.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4890
	s cr.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4891
	'%%(1)0 gives %(1)0' expandPlaceholdersWith:#(123) on:s.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4892
	s cr.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4893
	'%%10 gives %10' expandPlaceholdersWith:#(123) on:s.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4894
	s cr.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4895
	'%%(10) gives %(10) %<cr>%<tab>next line' expandPlaceholdersWith:#(123) on:s.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4896
	s cr.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4897
	'%test gives %1' expandPlaceholdersWith:#(123) on:s.
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4898
     ]
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4899
    "
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4900
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4901
    "
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4902
     |dict|
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4903
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4904
     dict := Dictionary new.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4905
     dict at:1 put:'one'.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4906
     dict at:$a put:'AAAAA'.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4907
     dict at:$b put:[ Time now ].
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4908
     String streamContents:[:s|
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  4909
	 'hello %1 %a %b' expandPlaceholdersWith:dict on:s.
10906
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
    "
13008
a27647c36b31 changed: #expandPlaceholdersWith:on:
Claus Gittinger <cg@exept.de>
parents: 12925
diff changeset
  4912
13138
d2eb0eba5907 changed: #expandPlaceholdersWith:on:
Claus Gittinger <cg@exept.de>
parents: 13137
diff changeset
  4913
    "Modified: / 18-11-2010 / 15:43:28 / cg"
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4914
!
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4915
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  4916
firstLine
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  4917
    ^ self asCollectionOfSubCollectionsSeparatedBy:Character cr do:[:line | ^ line].
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  4918
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  4919
    "
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4920
     'hello' firstLine
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4921
     '1\2\3' withCRs firstLine
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4922
     '\1\2\3' withCRs firstLine
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  4923
    "
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  4924
!
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  4925
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4926
tokensBasedOn:aCharacter
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4927
    "this is an ST-80 alias for the ST/X method
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4928
	asCollectionOfSubstringsSeparatedBy:"
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4929
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4930
    ^ self asCollectionOfSubstringsSeparatedBy:aCharacter
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4931
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4932
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4933
     'hello:world:isnt:this nice' tokensBasedOn:$:
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4934
     'foo,bar,baz' tokensBasedOn:$,
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4935
     '/etc/passwd' asFilename readStream nextLine tokensBasedOn:$:
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4936
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4937
!
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4938
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4939
withCEscapes
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4940
    "return a new string consisting of receivers characters
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4941
     with all special and unprintable characters replaced by \X-character escapes.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4942
     (similar to the way C-language literal Strings are represented).
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4943
     The resulting string will contain only 7-bit ascii characters.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4944
     Emphasis is not supported.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4945
     The following escapes are generated:
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4946
        \r      return character
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4947
        \n      newline character
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4948
        \t      tab character
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4949
        \\      the \ character itself
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4950
        \xnn    two digit hex number defining the characters ascii value
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4951
        \unnnn  four digit hex number defining the characters ascii value
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4952
        \Unnnnnnnn  eight digit hex number defining the characters ascii value
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4953
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4954
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4955
    |anyEscapeNeeded out seq|
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4956
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4957
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4958
     first, check if any escape is needed and return the receiver unchanged if not
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4959
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4960
    anyEscapeNeeded := self contains:[:ch | (ch codePoint between:32 and:126) not ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4961
    anyEscapeNeeded ifFalse:[ ^ self ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4962
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4963
    self hasChangeOfEmphasis ifTrue:[ self error:'emphasis not supported' ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4964
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4965
    out := WriteStream on:(String new:self size-1).
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4966
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4967
    self do:[:ch |
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4968
        |cp|
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4969
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4970
        (ch codePoint between:32 and:126) ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4971
            out nextPut:ch
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4972
        ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4973
            ch == Character return ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4974
                seq := '\r'
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4975
            ] ifFalse:[ ch == Character nl ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4976
                seq := '\n'
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4977
            ] ifFalse:[ ch == Character tab ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4978
                seq := '\t'
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4979
            ] ifFalse:[ ch == $\ ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4980
                seq := '\\'
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4981
            ] ifFalse:[ 
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4982
                cp := ch codePoint.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4983
                cp <= 16rFF ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4984
                    seq := '\x' , (cp printStringRadix:16 padTo:2)   
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4985
                ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4986
                    cp <= 16rFFFF ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4987
                        seq := '\u' , (cp printStringRadix:16 padTo:4)   
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4988
                    ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4989
                        seq := '\U',(cp printStringRadix:16 padTo:8)
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4990
                    ]
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4991
                ]
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4992
            ]]]].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4993
            out nextPutAll:seq
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4994
        ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4995
    ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4996
    ^ out contents
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4997
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4998
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  4999
     'hello\nworld\na\n\tnice\n\t\tstring' withoutCEscapes withCEscapes  
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5000
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5001
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5002
    "Created: / 25-01-2012 / 11:08:16 / cg"
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5003
!
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5004
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5005
withCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5006
    "return a new string consisting of receivers characters
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5007
     with all \-characters replaced by cr-characters."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5008
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5009
    ^ self copyReplaceAll:$\ with:(Character cr)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5010
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5011
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5012
     'hello\world' withCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5013
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5014
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5015
    "Modified: / 18.7.1998 / 22:53:02 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5016
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5017
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5018
withEscapes
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5019
    "has been renamed; the name withEscapes is misleading"
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5020
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5021
    self obsoleteMethodWarning:'use withoutCEscapes'.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5022
    ^ self withoutCEscapes.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5023
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5024
    "Modified: / 25-01-2012 / 10:42:30 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5025
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5026
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5027
withMatchEscapes
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5028
    "return a copy of the receiver with all match characters escaped
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5029
     by $\ characters (to be usable as a match string).
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5030
     Return the receiver, if there are none."
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5031
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  5032
    |in out c escape|
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  5033
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  5034
    escape := self class matchEscapeCharacter.
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5035
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5036
    in := self readStream.
7986
715c72e62d58 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7982
diff changeset
  5037
    out := WriteStream on:(self species new:self size).
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5038
    [in atEnd] whileFalse:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5039
	c := in next.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5040
	(c == escape or:['*[#' includes:c]) ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5041
	    out nextPut:$\.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5042
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5043
	out nextPut:c.
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5044
    ].
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5045
    ^ out contents.
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5046
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5047
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5048
     '*foo' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5049
     '\*foo' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5050
     '*foo' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5051
     '\\*foo' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5052
     'foo*' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5053
     'foo\*' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5054
     'foo\' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5055
     'f*o*o' withMatchEscapes
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5056
    "
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5057
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5058
    "Modified: 2.4.1997 / 18:13:04 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5059
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5060
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5061
withTabs
735
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  5062
    "return a string consisting of the receivers characters
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  5063
     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
  5064
     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
  5065
     otherwise a new string is returned.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5066
     Limitation: only the very first spaces are replaced
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5067
		 (i.e. if the receiver contains newLine characters,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5068
		  no tabs are inserted after those lineBreaks)"
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5069
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5070
    |idx   "{ SmallInteger }"
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5071
     nTabs "{ SmallInteger }"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5072
     newString|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5073
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5074
    idx := self findFirst:[:c | (c ~~ Character space)].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5075
    nTabs := (idx-1) // 8.
5815
4acdd87a77d4 // can return negative numbers.
Stefan Vogel <sv@exept.de>
parents: 5795
diff changeset
  5076
    nTabs <= 0 ifTrue:[^ self].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5077
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5078
    "any tabs"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5079
    newString := self class new:(self size - (nTabs * 7)).
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5080
    newString atAll:(1 to:nTabs) put:(Character tab).
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5081
    newString replaceFrom:(nTabs + 1) with:self startingAt:(nTabs * 8 + 1).
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5082
    ^ newString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5083
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5084
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5085
     '12345678901234567890' withTabs
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5086
     '       8901234567890' withTabs
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5087
     '        901234567890' withTabs
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5088
     '               67890' withTabs
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5089
     '                7890' withTabs
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5090
     '                 890' withTabs
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5091
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5092
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5093
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5094
withTabsExpanded
735
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  5095
    "return a string consisting of the receivers characters,
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5096
     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
  5097
     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
  5098
     otherwise a new string is returned.
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  5099
     This does handle multiline strings."
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5100
5741
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5101
    ^ self withTabsExpanded:8
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5102
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5103
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5104
     ('1' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5105
     ('12345' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5106
     ('123456' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5107
     ('1234567' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5108
     ('12345678' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5109
     ('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
  5110
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5111
     (String with:Character tab
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5112
	     with:Character tab
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5113
	     with:$1) withTabsExpanded
5741
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5114
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5115
     (String with:Character tab
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5116
	     with:$1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5117
	     with:Character tab
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5118
	     with:$2) withTabsExpanded
5741
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5119
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5120
     (String with:Character tab
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5121
	     with:$1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5122
	     with:Character cr
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5123
	     with:Character tab
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5124
	     with:$2) withTabsExpanded
5741
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5125
    "
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5126
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5127
    "Modified: 12.5.1996 / 13:05:10 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5128
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5129
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5130
withTabsExpanded:numSpaces
5741
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5131
    "return a string consisting of the receivers characters,
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5132
     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
  5133
     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
  5134
     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
  5135
     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
  5136
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5137
    |col    "{ SmallInteger }"
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5138
     str ch
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5139
     dstIdx "{ SmallInteger }"
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5140
     newSz  "{ SmallInteger }"
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5141
     sz "{ SmallInteger }"
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5142
     hasEmphasis e|
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5143
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5144
    (self includes:(Character tab)) ifFalse:[^ self].
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5145
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5146
    sz := self size.
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5147
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5148
    "/ count the new size first, instead of
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5149
    "/ multiple resizing (better for large strings)
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5150
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5151
    col := 1. newSz := 0.
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5152
    1 to:sz do:[:srcIdx |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5153
	ch := self at:srcIdx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5154
	ch == Character tab ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5155
	    col := col + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5156
	    newSz := newSz + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5157
	    ch == Character cr ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5158
		col := 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5159
	    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5160
	] ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5161
	    (col \\ numSpaces) to:numSpaces do:[:ii |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5162
		newSz := newSz + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5163
		col := col + 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5164
	    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5165
	]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5166
    ].
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5167
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5168
    str := self species new:newSz.
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5169
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5170
    hasEmphasis := self hasChangeOfEmphasis.
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5171
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5172
    col := 1. dstIdx := 1.
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5173
    1 to:sz do:[:srcIdx |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5174
	ch := self at:srcIdx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5175
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5176
	ch == Character tab ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5177
	    col := col + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5178
	    ch == Character cr ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5179
		col := 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5180
	    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5181
	    hasEmphasis ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5182
		e := self emphasisAt:srcIdx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5183
		str emphasisAt:dstIdx put:e
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5184
	    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5185
	    str at:dstIdx put:ch.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5186
	    dstIdx := dstIdx + 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5187
	] ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5188
	    (col \\ numSpaces) to:numSpaces do:[:ii |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5189
		str at:dstIdx put:Character space.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5190
		dstIdx := dstIdx + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5191
		col := col + 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5192
	    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5193
	]
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5194
    ].
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5195
    ^ str
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5196
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5197
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5198
     ('1' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5199
     ('1' , Character tab asString , 'x') withTabsExpanded:4
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5200
     ('12345' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5201
     ('123456' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5202
     ('1234567' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5203
     ('12345678' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5204
     ('123456789' , Character tab asString , 'x') withTabsExpanded
735
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  5205
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5206
     (String with:Character tab
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5207
	     with:Character tab
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5208
	     with:$1) withTabsExpanded
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5209
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5210
     (String with:Character tab
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5211
	     with:$1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5212
	     with:Character tab
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5213
	     with:$2) withTabsExpanded
735
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  5214
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  5215
     (String with:Character tab
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5216
	     with:$1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5217
	     with:Character cr
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5218
	     with:Character tab
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5219
	     with:$2) withTabsExpanded
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5220
    "
735
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  5221
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5222
    "Modified: 12.5.1996 / 13:05:10 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5223
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5224
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5225
withoutAllSpaces
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5226
    ^ self asCollectionOfWords asStringWith:''.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5227
"/    |col string|
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5228
"/
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5229
"/    col := self asCollectionOfWords.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5230
"/    string := String new.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5231
"/    col do:[:el |
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5232
"/       string := string,el
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5233
"/    ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5234
"/    ^string
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5235
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5236
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5237
     'hello wwww'  withoutAllSpaces
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5238
     'hel   lo www   w'  withoutAllSpaces
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5239
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5240
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5241
    "Modified: / 18.7.1998 / 22:53:08 / cg"
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5242
!
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5243
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5244
withoutCEscapes
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5245
    "return a new string consisting of receivers characters
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5246
     with all \X-character escapes replaced by corresponding-characters.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5247
     (similar to the way C-language Strings are converted).
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5248
     The following escapes are supported:
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5249
        \r      return character
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5250
        \n      newline character
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5251
        \b      backspace character
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5252
        \f      formfeed character
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5253
        \t      tab character
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5254
        \e      escape character
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5255
        \\      the \ character itself
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5256
        \nnn    three digit octal number defining the characters ascii value
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5257
        \xnn    two digit hex number defining the characters ascii value
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5258
        \unnnn  four digit hex number defining the characters unicode value
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5259
        \Unnnnnnnn  eight digit hex number defining the characters unicode value
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5260
        \other  other
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5261
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5262
     Notice, that \' is NOT a valid escape, since the general syntax of
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5263
     string constants is not affected by this method.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5264
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5265
     Although easily implementable, this is NOT done automatically
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5266
     by the compiler (due to a lack of a language standard for this).
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5267
     However, the compiler may detect sends ot #withEscapes to string literals
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5268
     and place a modified string constant into the binary/byte-code.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5269
     Therefore, no runtime penalty will be payed for using these escapes.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5270
     (not in pre 2.11 versions)
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5271
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5272
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5273
    |val     "{ SmallInteger }"
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5274
     in out nextChar nDigits|
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5275
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5276
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5277
     first, see if there is any escape; if not, return the receiver unchanged
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5278
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5279
    (self includes:$\) ifFalse:[^ self ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5280
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5281
    self hasChangeOfEmphasis ifTrue:[ self error:'emphasis not supported' ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5282
    out := CharacterWriteStream on:(String new:self size - 1).
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5283
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5284
    in := ReadStream on:self.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5285
    [in atEnd] whileFalse:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5286
        nextChar := in next.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5287
        nextChar == $\ ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5288
            in atEnd ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5289
            ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5290
                nextChar := in next.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5291
                nextChar == $r ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5292
                    nextChar := Character return
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5293
                ] ifFalse:[ nextChar == $n ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5294
                    nextChar := Character nl
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5295
                ] ifFalse:[ nextChar == $b ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5296
                    nextChar := Character backspace
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5297
                ] ifFalse:[ nextChar == $f ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5298
                    nextChar := Character newPage
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5299
                ] ifFalse:[ nextChar == $t ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5300
                    nextChar := Character tab
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5301
                ] ifFalse:[ nextChar == $e ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5302
                    nextChar := Character esc
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5303
                ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5304
                    nextChar == $0 ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5305
                        val := 0.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5306
                        nextChar := in peek.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5307
                        nDigits := 1.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5308
                        [nextChar notNil and:[nextChar isDigit and:[nDigits <= 3]]] whileTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5309
                            val := (val * 8) + nextChar digitValue.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5310
                            nextChar := in nextPeek.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5311
                            nDigits := nDigits + 1.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5312
                        ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5313
                        nextChar := Character value:val.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5314
                    ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5315
                        val := 0.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5316
                        nextChar == $x ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5317
                            2 timesRepeat:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5318
                                nextChar := in next.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5319
                                val := (val * 16) + nextChar digitValue.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5320
                            ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5321
                            nextChar := Character value:val.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5322
                        ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5323
                            nextChar == $u ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5324
                                4 timesRepeat:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5325
                                    nextChar := in next.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5326
                                    val := (val * 16) + nextChar digitValue.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5327
                                ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5328
                                nextChar := Character value:val.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5329
                            ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5330
                                nextChar == $U ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5331
                                    8 timesRepeat:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5332
                                        nextChar := in next.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5333
                                        val := (val * 16) + nextChar digitValue.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5334
                                    ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5335
                                    nextChar := Character value:val.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5336
                                ]
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5337
                            ]
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5338
                        ]
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5339
                    ]
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5340
                ]]]]]].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5341
            ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5342
        ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5343
        out nextPut:nextChar.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5344
    ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5345
    ^ out contents
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5346
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5347
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5348
     'hello world' withoutCEscapes         
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5349
     'hello\world' withoutCEscapes         
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5350
     'hello\world\' withoutCEscapes        
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5351
     'hello world\' withoutCEscapes        
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5352
     'hello\tworld' withoutCEscapes        
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5353
     'hello\nworld\na\n\tnice\n\t\tstring' withoutCEscapes
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5354
     'hello\tworld\n' withoutCEscapes   
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5355
     'hello\010world' withoutCEscapes   
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5356
     'hello\r\nworld' withoutCEscapes   
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5357
     'hello\r\n\x08world' withoutCEscapes 
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5358
     '0\x080' withoutCEscapes       
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5359
     '0\u12340' withoutCEscapes       
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5360
     '0\U123456780' withoutCEscapes       
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5361
     '0\0a' withoutCEscapes     
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5362
     '0\00a' withoutCEscapes       
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5363
     '0\000a' withoutCEscapes       
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5364
     '0\0000a' withoutCEscapes       
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5365
     '0\00000a' withoutCEscapes       
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5366
     '0\03770' withoutCEscapes       
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5367
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5368
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5369
    "Created: / 25-01-2012 / 10:41:44 / cg"
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5370
!
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5371
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5372
withoutCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5373
    "return a new collection consisting of receivers elements
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5374
     with all cr-characters replaced by \-characters.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5375
     This is the reverse operation of withCRs."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5376
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5377
    ^ self copyReplaceAll:(Character cr) with:$\
12319
18b80c2ce1e3 oops #withoutSeparators #withoutSpaces were noops
Claus Gittinger <cg@exept.de>
parents: 12317
diff changeset
  5378
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5379
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5380
     'hello
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5381
world' withoutCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5382
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5383
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5384
    "Modified: / 18.7.1998 / 22:53:08 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5385
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5386
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5387
withoutLeadingSeparators
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5388
    "return a copy of myself without leading separators.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5389
     Notice: this does remove tabs, newline or any other whitespace.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5390
     Returns an empty string, if the receiver consist only of whitespace."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5391
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5392
    |index|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5393
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5394
    index := self indexOfNonSeparatorStartingAt:1.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5395
    index ~~ 0 ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5396
	index == 1 ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5397
	    ^ self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5398
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5399
	^ self copyFrom:index
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5400
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5401
    ^ ''
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5402
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5403
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5404
     '    foo    ' withoutLeadingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5405
     'foo    '     withoutLeadingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5406
     '    foo'     withoutLeadingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5407
     '       '     withoutLeadingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5408
     'foo'         withoutLeadingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5409
     ('  ' , Character tab asString , ' foo   ') withoutLeadingSeparators inspect
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5410
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5411
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5412
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5413
withoutMatchEscapes
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5414
    "return a copy of the receiver with all $\ removed or
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5415
     the receiver, if there are none."
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5416
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  5417
    |in out c escape|
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  5418
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  5419
    escape := self class matchEscapeCharacter.
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5420
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5421
    in := self readStream.
8222
f2c454a9a038 replaced '' writeStream by String writeStream
Claus Gittinger <cg@exept.de>
parents: 8124
diff changeset
  5422
    out := self species writeStream.
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5423
    [in atEnd] whileFalse:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5424
	c := in next.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5425
	c == escape ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5426
	    in atEnd ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5427
		c := in next.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5428
	    ]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5429
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5430
	out nextPut:c.
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5431
    ].
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5432
    ^ out contents.
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5433
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5434
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5435
     '*foo' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5436
     '\*foo' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5437
     '*foo' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5438
     '\\*foo' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5439
     'foo*' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5440
     'foo\*' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5441
     'foo\' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5442
     'f\*o\*o' withoutMatchEscapes
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5443
    "
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5444
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5445
    "Modified: 30.6.1997 / 13:40:23 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5446
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5447
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5448
withoutPrefix:aString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5449
    "if the receiver startsWith aPrefix, return a copy without it.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5450
     Otherwise return the receiver"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5451
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5452
    (self startsWith:aString) ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5453
	^ self copyFrom:aString size + 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5454
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5455
    ^ self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5456
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5457
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5458
     'helloworld' withoutPrefix:'hello'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5459
     'helloworld' withoutPrefix:'foo'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5460
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5461
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5462
10671
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5463
withoutQuotes
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5464
    "remove quotes ("" and ') from the front and the end of myself"
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5465
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5466
    |result quote|
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5467
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5468
    result := self.
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5469
    ((result startsWith:$") or:[(result startsWith:$')]) ifTrue:[
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5470
	quote := result at:1.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5471
	result := result copyFrom:2.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5472
	(result endsWith:quote) ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5473
	    result := result copyWithoutLast:1
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5474
	].
10671
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5475
    ].
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5476
    ^ result
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5477
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5478
"/    '"hello"' withoutQuotes
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5479
"/    '''hello''' withoutQuotes
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5480
"/    'hello' withoutQuotes
10671
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5481
!
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5482
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5483
withoutSeparators
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5484
    "return a copy of myself without leading and trailing whitespace.
4156
3079a5a94617 comments
Claus Gittinger <cg@exept.de>
parents: 4117
diff changeset
  5485
     (but whiteSpace in-between is preserved)
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5486
     Whitespace is space, tab, newline, formfeed.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5487
     Use withoutSpaces, if you want to remove spaces only."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5488
12319
18b80c2ce1e3 oops #withoutSeparators #withoutSpaces were noops
Claus Gittinger <cg@exept.de>
parents: 12317
diff changeset
  5489
    ^ self trimForWhich:[:ch | ch isSeparator]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5490
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5491
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5492
     '    foo    ' withoutSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5493
     '    foo' withoutSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5494
     'foo    ' withoutSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5495
     '       ' withoutSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5496
     ('  foo' , Character tab asString , '    ') withoutSeparators inspect
12319
18b80c2ce1e3 oops #withoutSeparators #withoutSpaces were noops
Claus Gittinger <cg@exept.de>
parents: 12317
diff changeset
  5497
     '    foo    ' asUnicode16String withoutSeparators
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5498
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5499
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5500
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5501
withoutSpaces
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5502
    "return a copy of myself without leading and trailing spaces.
4156
3079a5a94617 comments
Claus Gittinger <cg@exept.de>
parents: 4117
diff changeset
  5503
     (but spaces in-between are preserved)
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5504
     Notice: this does NOT remove tabs, newline or any other whitespace.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5505
     Use withoutSeparators for this."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5506
12319
18b80c2ce1e3 oops #withoutSeparators #withoutSpaces were noops
Claus Gittinger <cg@exept.de>
parents: 12317
diff changeset
  5507
    ^ self trimForWhich:[:ch | ch == Character space]
608
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
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5510
     '    foo    ' withoutSpaces
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5511
     'foo    '     withoutSpaces
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5512
     '    foo'     withoutSpaces
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5513
     '       '     withoutSpaces
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5514
     'a     b'     withoutSpaces
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5515
     ('  foo' , Character tab asString , '    ') withoutSpaces inspect
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5516
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5517
!
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
withoutTrailingSeparators
915
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  5520
    "return a copy of myself without trailing separators.
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  5521
     Notice: this does remove tabs, newline or any other whitespace.
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  5522
     Returns an empty string, if the receiver consist only of whitespace."
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  5523
12188
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  5524
    ^ self withoutTrailingForWhich:[:ch | ch isSeparator]
915
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  5525
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  5526
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5527
     '    foo    ' withoutTrailingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5528
     'foo    '     withoutTrailingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5529
     '    foo'     withoutTrailingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5530
     '       '     withoutTrailingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5531
     'foo'         withoutTrailingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5532
     ('  ' , Character tab asString , ' foo   ') withoutTrailingSeparators inspect
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5533
     ('   foo' , Character tab asString) withoutTrailingSeparators inspect
915
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  5534
    "
9192
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
!CharacterArray methodsFor:'substring searching'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5538
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5539
findString:subString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5540
    "find a substring. if found, return the index;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5541
     if not found, return 0."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5542
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5543
    ^ self indexOfSubCollection:subString startingAt:1 ifAbsent:0 caseSensitive:true
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5544
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5545
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5546
     'hello world' findString:'llo'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5547
     'hello world' findString:'ole'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5548
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5549
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5550
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5551
findString:subString ifAbsent:exceptionBlock
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5552
    "find a substring. If found, return the index;
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5553
     if not found, return the result of evaluating exceptionBlock."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5554
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5555
    ^ self indexOfSubCollection:subString startingAt:1 ifAbsent:exceptionBlock caseSensitive:true
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5556
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5557
11018
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5558
findString:subString ignoreCase:ignoreCase
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5559
    "find a substring. if found, return the index;
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5560
     if not found, return 0."
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5561
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5562
    ^ self indexOfSubCollection:subString startingAt:1 ifAbsent:0 caseSensitive:ignoreCase not
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5563
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5564
    "
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5565
     'hello world' findString:'LLo' ignoreCase:false
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5566
     'hello world' findString:'LLo' ignoreCase:true
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5567
    "
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5568
!
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5569
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5570
findString:subString startingAt:index
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5571
    "find a substring, starting at index. if found, return the index;
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5572
     if not found, return 0."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5573
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5574
    ^ self indexOfSubCollection:subString startingAt:index ifAbsent:0 caseSensitive:true
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5575
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5576
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5577
     'hello yello' findString:'llo' startingAt:1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5578
     'hello yello' findString:'llo' startingAt:5
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5579
     'hello yello' findString:'llo' startingAt:15
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5580
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5581
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5582
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5583
findString:subString startingAt:index ifAbsent:exceptionBlock
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5584
    "find a substring, starting at index. if found, return the index;
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5585
     if not found, return the result of evaluating exceptionBlock."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5586
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5587
    ^ self indexOfSubCollection:subString startingAt:index ifAbsent:exceptionBlock caseSensitive:true
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5588
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5589
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5590
findString:subString startingAt:index ifAbsent:exceptionBlock caseSensitive:caseSensitive
10929
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  5591
    "find a substring, starting at index. if found, return the index;
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  5592
     if not found, return the result of evaluating exceptionBlock."
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  5593
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  5594
    ^ self indexOfSubCollection:subString startingAt:index ifAbsent:exceptionBlock caseSensitive:caseSensitive
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  5595
!
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  5596
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5597
includesString:aString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5598
    "return true, if a substring is contained in the receiver"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5599
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5600
    ^ (self indexOfSubCollection:aString startingAt:1 ifAbsent:0 caseSensitive:true) ~~ 0
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5601
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5602
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5603
     'hello world' includesString:'hel'
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5604
     'hello world' includesString:'rld'
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5605
     'hello world' includesString:'llo'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5606
     'hello world' includesString:'LLO'
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5607
     'hello world' includesString:''
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5608
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5609
!
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  5610
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  5611
includesString:aString caseSensitive:caseSensitive
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5612
    "return true, if a substring is contained in the receiver"
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5613
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5614
    ^ (self indexOfSubCollection:aString startingAt:1 ifAbsent:0 caseSensitive:caseSensitive) ~~ 0
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5615
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5616
    "
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5617
     'hello world' includesString:'hel' caseSensitive:true
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5618
     'hello world' includesString:'HEL' caseSensitive:true
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5619
     'hello world' includesString:'HEL' caseSensitive:false
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5620
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5621
     'hello world' includesString:'wor' caseSensitive:true
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5622
     'hello world' includesString:'WOR' caseSensitive:true
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5623
     'hello world' includesString:'WOR' caseSensitive:false
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5624
    "
9192
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
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5627
indexOfSubCollection:subString startingAt:index ifAbsent:exceptionBlock
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5628
    "find a substring, starting at index. if found, return the index;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5629
     if not found, return the result of evaluating exceptionBlock.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5630
     This is a q&d hack - not very efficient"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5631
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5632
    ^ self indexOfSubCollection:subString startingAt:index ifAbsent:exceptionBlock caseSensitive:true.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5633
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5634
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5635
indexOfSubCollection:subString startingAt:index ifAbsent:exceptionBlock caseSensitive:caseSensitive
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5636
    "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
  5637
     if not found, return the result of evaluating exceptionBlock.
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5638
     This is a q&d hack - not very efficient"
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5639
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5640
    |firstChar found
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5641
     startIndex "{ Class: SmallInteger }"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5642
     subSize    "{ Class: SmallInteger }"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5643
     mySize     "{ Class: SmallInteger }"
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5644
     runIdx     "{ Class: SmallInteger }"
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5645
     tester|
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5646
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5647
    subSize := subString size.
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5648
    subSize == 0 ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5649
	subString isString ifFalse:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5650
	   self error:'non string argument' mayProceed:true.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5651
	].
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5652
	"empty string does not match"
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5653
	^ 0.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5654
	"empty string matches"
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5655
	^ index
6122
a98958f1c85f handle non-string arg to indexOfSubString:
Claus Gittinger <cg@exept.de>
parents: 6119
diff changeset
  5656
    ].
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5657
    tester := caseSensitive
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5658
		ifTrue:[  [:c1 :c2 | c1 = c2 ]  ]
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5659
		ifFalse:[ [:c1 :c2 | c1 sameAs: c2 ] ].
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5660
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5661
    mySize := self size.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5662
    firstChar := subString at:1.
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5663
    caseSensitive ifTrue:[
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5664
	startIndex := self indexOf:firstChar startingAt:index.
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5665
    ] ifFalse:[
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5666
	startIndex := self findFirst:[:c | c sameAs:firstChar] startingAt:index.
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5667
    ].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5668
    [startIndex == 0] whileFalse:[
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5669
	runIdx := startIndex.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5670
	found := true.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5671
	1 to:subSize do:[:i |
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5672
	    runIdx > mySize ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5673
		found := false
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5674
	    ] ifFalse:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5675
		(tester value:(subString at:i) value:(self at:runIdx)) ifFalse:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5676
		    found := false
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5677
		]
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5678
	    ].
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5679
	    runIdx := runIdx + 1
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5680
	].
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5681
	found ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5682
	    ^ startIndex
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5683
	].
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5684
	caseSensitive ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5685
	    startIndex := self indexOf:firstChar startingAt:(startIndex + 1)
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5686
	] ifFalse:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5687
	    startIndex := self findFirst:[:c | c sameAs:firstChar] startingAt:(startIndex + 1).
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
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
    ^ exceptionBlock value
1005
4507487e0be6 more on encoding/decoding (still unfinished)
Claus Gittinger <cg@exept.de>
parents: 997
diff changeset
  5691
4507487e0be6 more on encoding/decoding (still unfinished)
Claus Gittinger <cg@exept.de>
parents: 997
diff changeset
  5692
    "Modified: 23.2.1996 / 15:35:15 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5693
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5694
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5695
restAfter:keyword withoutSeparators:strip
651
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5696
    "compare the left of the receiver with keyword,
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5697
     if it matches return the right.
651
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5698
     Finally, if strip is true, remove whiteSpace.
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5699
     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
  5700
	something: rest
759
908363ce8a32 interest is written with one 'r' (shame on me)
Claus Gittinger <cg@exept.de>
parents: 735
diff changeset
  5701
     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
  5702
     begins with something.
651
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5703
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5704
     You may wonder why such a specialized method exists here
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5705
     - this is so common when processing mailboxes,
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5706
     rcs files, nntp/pop3 responses, that is was considered worth
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5707
     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
  5708
     times in variuos places."
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5709
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5710
    |rest|
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5711
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5712
    (self startsWith:keyword) ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5713
	rest := self copyFrom:(keyword size + 1).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5714
	strip ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5715
	    rest := rest withoutSeparators
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5716
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5717
	^ rest
651
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5718
    ].
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5719
    ^ nil
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5720
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5721
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5722
     'foo: hello world' restAfter:'foo:' withoutSeparators:true
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5723
     'funny: something' restAfter:'foo:' withoutSeparators:true
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5724
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5725
     'foo:     hello world    ' restAfter:'foo:' withoutSeparators:true
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5726
     'foo:     hello world    ' restAfter:'foo:' withoutSeparators:false
651
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5727
    "
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5728
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5729
    "Created: 25.11.1995 / 11:04:18 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5730
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5731
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5732
!CharacterArray methodsFor:'testing'!
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
isAlphaNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5735
    "return true, if the receiver is some alphanumeric word;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5736
     i.e. consists of a letter followed by letters or digits."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5737
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5738
    self size == 0 ifTrue:[
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5739
	"mhmh what is this ?"
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5740
	^ false
9192
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
    (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
  5743
    ^ self conform:[:char | char isLetterOrDigit].
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  5744
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  5745
    "
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5746
     'helloWorld' isAlphaNumeric
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5747
     'foo1234' isAlphaNumeric
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5748
     'f1234' isAlphaNumeric
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5749
     '1234' isAlphaNumeric
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5750
     '+' isAlphaNumeric
10093
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  5751
    "
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  5752
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  5753
    "Modified: / 13-10-2006 / 12:53:49 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5754
!
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5755
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5756
isBinarySelector
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5757
    "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
  5758
     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
  5759
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5760
    |binopChars|
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5761
13332
329707312282 changed: #isBinarySelector
Stefan Vogel <sv@exept.de>
parents: 13327
diff changeset
  5762
    (self size > Scanner maxBinarySelectorSize) ifTrue:[^ false].
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5763
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5764
    binopChars := Scanner binarySelectorCharacters.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5765
    ^ (self conform:[:char | (binopChars includes:char)])
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5766
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5767
    "
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5768
     'foo:bar:' isBinarySelector
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5769
     #foo:bar: isBinarySelector
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5770
     'hello' isBinarySelector
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5771
     '+' isBinarySelector
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5772
     '|' isBinarySelector
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5773
     '?' isBinarySelector
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5774
     ':' isBinarySelector
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5775
     'a:' isBinarySelector
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5776
     '->' isBinarySelector
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5777
     '<->' isBinarySelector
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5778
     '::' isBinarySelector
7482
e73c296fa7dc + isBinarySelector
Claus Gittinger <cg@exept.de>
parents: 7423
diff changeset
  5779
    "
e73c296fa7dc + isBinarySelector
Claus Gittinger <cg@exept.de>
parents: 7423
diff changeset
  5780
e73c296fa7dc + isBinarySelector
Claus Gittinger <cg@exept.de>
parents: 7423
diff changeset
  5781
    "Modified: 4.1.1997 / 14:16:14 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5782
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5783
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5784
isBlank
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5785
    "return true, if the receiver contains spaces only"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5786
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5787
    ^ (self contains:[:char | char ~~ Character space]) not
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5788
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5789
    "
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5790
     '' isBlank
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5791
     '   a    ' isBlank
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5792
     '        ' isBlank
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5793
     '        ' asUnicode16String isBlank
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5794
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5795
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5796
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5797
isKeywordSelector
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5798
    "return true, iff there are only alphanumeric or underline characters separated by colons.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5799
     Must end with a colon."
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5800
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5801
    |state|
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5802
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5803
    state := #initial.
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5804
    self do:[:char |
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5805
	(state == #initial or:[ state == #gotColon]) ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5806
	    (char isLetter or:[ char == $_ ]) ifFalse:[^ false].
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5807
	    state := #gotCharacter.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5808
	] ifFalse:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5809
	    char == $: ifTrue:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5810
		state := #gotColon.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5811
	    ] ifFalse:[
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5812
		(char isLetterOrDigit or:[char == $_]) ifFalse:[^ false].
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5813
	    ].
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5814
	].
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5815
    ].
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5816
    ^ state == #gotColon.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5817
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5818
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5819
     self assert:(':' isKeywordSelector not).
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5820
     self assert:(':a' isKeywordSelector not).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5821
     self assert:('1:' isKeywordSelector not).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5822
     self assert:('a:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5823
     self assert:('_:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5824
     self assert:('_a:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5825
     self assert:('_1:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5826
     self assert:('_1::' isKeywordSelector not).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5827
     self assert:('_:_:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5828
     self assert:('a:b:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5829
     self assert:('aa:bb:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5830
     self assert:('aa:bb:a' isKeywordSelector not).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5831
     self assert:('1:2:' isKeywordSelector not).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5832
    "
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5833
!
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5834
10431
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5835
isNameSpaceSelector
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5836
    "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
  5837
     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
  5838
     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
  5839
     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
  5840
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5841
    |i|
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5842
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5843
    (self first == $:) ifFalse:[^ false].
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5844
    i := self indexOf:$: startingAt:2.
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5845
    i == 0 ifTrue:[^ false].
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5846
    self size <= (i+1) ifTrue:[^ false].
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5847
    (self at:i+1) == $: ifFalse:[^ false].
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5848
    (self at:i+2) == $: ifTrue:[^ false].
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5849
    "/ 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
  5850
    ^ true
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5851
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5852
    "test:
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5853
     self assert:('+' isNameSpaceSelector) not.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5854
     self assert:(':+' isNameSpaceSelector) not.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5855
     self assert:(':Foo:+' isNameSpaceSelector) not.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5856
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5857
     self assert:(':Foo::+' isNameSpaceSelector).
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5858
     self assert:(':Foo::bar:baz:' isNameSpaceSelector).
10431
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5859
    "
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5860
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5861
    "Created: / 05-03-2007 / 11:35:31 / cg"
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5862
!
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5863
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5864
isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5865
    "return true, if the receiver is some numeric word;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5866
     i.e. consists only of digits."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5867
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5868
    self size == 0 ifTrue:[
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5869
	^ false
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5870
    ].
10093
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  5871
    ^ self conform:[:char | char isDigit]
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5872
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5873
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5874
     'helloWorld' isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5875
     'foo1234' isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5876
     'f1234' isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5877
     '1234' isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5878
     '+' isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5879
    "
10093
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  5880
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  5881
    "Modified: / 13-10-2006 / 12:54:12 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5882
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5883
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5884
isString
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5885
    "return true, if the receiver is some kind of string;
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5886
     true is returned here - redefinition of Object>>isString."
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5887
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5888
    ^ true
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5889
!
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5890
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5891
isUnarySelector
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5892
    "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
  5893
9471
7b1df2a2a2d7 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9425
diff changeset
  5894
    ^ (self first isLetter or:[ self first == $_ ])
9845
361f4b5d7b19 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9522
diff changeset
  5895
      and:[ self conform: [ :chr | chr isLetterOrDigit or:[chr == $_] ]]
361f4b5d7b19 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9522
diff changeset
  5896
361f4b5d7b19 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9522
diff changeset
  5897
    "Modified: / 13-09-2006 / 11:35:15 / cg"
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5898
!
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5899
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5900
isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5901
    "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
  5902
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5903
    |scanner tok|
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5904
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5905
    scanner := Compiler new.
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5906
    scanner source:(self readStream).
11630
6db5956f188f isValidSmalltalkIdentifier: return true/false (catch parseError)
Claus Gittinger <cg@exept.de>
parents: 11565
diff changeset
  5907
    Parser parseErrorSignal handle:[:ex |
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5908
	tok := nil.
11630
6db5956f188f isValidSmalltalkIdentifier: return true/false (catch parseError)
Claus Gittinger <cg@exept.de>
parents: 11565
diff changeset
  5909
    ] do:[
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5910
	tok := scanner nextToken.
11630
6db5956f188f isValidSmalltalkIdentifier: return true/false (catch parseError)
Claus Gittinger <cg@exept.de>
parents: 11565
diff changeset
  5911
    ].
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5912
    tok ~~ #Identifier ifTrue:[
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5913
	^ false
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5914
    ].
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5915
    scanner tokenPosition == 1 ifFalse:[^ false].
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5916
    ^ scanner sourceStream atEnd.
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5917
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5918
    "
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5919
     'foo' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5920
     '1foo' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5921
     '_foo' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5922
     '_foo_bar_' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5923
     'foo ' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5924
     ' foo' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5925
    "
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5926
!
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5927
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5928
numArgs
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5929
    "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
  5930
9038
d75b89570ec0 numArgs fixed (binOps can now be longer)
Claus Gittinger <cg@exept.de>
parents: 9019
diff changeset
  5931
    |binopChars|
d75b89570ec0 numArgs fixed (binOps can now be longer)
Claus Gittinger <cg@exept.de>
parents: 9019
diff changeset
  5932
d75b89570ec0 numArgs fixed (binOps can now be longer)
Claus Gittinger <cg@exept.de>
parents: 9019
diff changeset
  5933
    (self size <= Scanner maxBinarySelectorSize) ifTrue:[
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5934
	binopChars := Scanner binarySelectorCharacters.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5935
	(self conform:[:eachChar | (binopChars includes:eachChar)]) ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5936
	    ^ 1
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5937
	].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5938
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5939
    ^ self occurrencesOf:$:
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5940
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5941
    "
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5942
     'foo:bar:' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5943
     #foo:bar: numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5944
     'hello' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5945
     '+' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5946
     '++' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5947
     '+++' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5948
     '|' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5949
     '?' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5950
     '_' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5951
     '_:' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5952
     '_:_:' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5953
     '<->' numArgs
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5954
    "
2051
08fd6a693ee3 ask Scanner for valid binarySelector characters in numArgs
Claus Gittinger <cg@exept.de>
parents: 1978
diff changeset
  5955
10088
b8e69093ca13 code cleanup
Claus Gittinger <cg@exept.de>
parents: 10061
diff changeset
  5956
    "Modified: / 13-10-2006 / 11:52:33 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5957
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5958
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5959
partsIfSelector
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5960
    "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
  5961
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5962
    |idx1 "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5963
     coll idx2 sz|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5964
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5965
    coll := OrderedCollection new.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5966
    idx1 := 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5967
    sz := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5968
    [true] whileTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5969
	idx2 := self indexOf:$: startingAt:idx1 + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5970
	(idx2 == 0 or:[idx2 == sz]) ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5971
	    coll add:(self copyFrom:idx1).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5972
	    ^ coll
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5973
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5974
	coll add:(self copyFrom:idx1 to:idx2).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5975
	idx1 := idx2 + 1
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5976
    ].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5977
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5978
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5979
     'foo:bar:' partsIfSelector
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5980
     #foo:bar: partsIfSelector
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5981
     'hello' partsIfSelector
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5982
     '+' partsIfSelector
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5983
    "
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5984
! !
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5985
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5986
!CharacterArray methodsFor:'tracing'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5987
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5988
traceInto:aRequestor level:level from:referrer
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5989
    "double dispatch into tracer, passing my type implicitely in the selector"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5990
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5991
    ^ aRequestor traceCharacterArray:self level:level from:referrer
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5992
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5993
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5994
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5995
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5996
!CharacterArray methodsFor:'visiting'!
8395
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  5997
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  5998
acceptVisitor:aVisitor with:aParameter
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  5999
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  6000
    ^ aVisitor visitString:self with:aParameter
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  6001
! !
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  6002
1849
9f35f5934ec6 added msdos-latin1 en/decoder (code = #msdos850)
Claus Gittinger <cg@exept.de>
parents: 1669
diff changeset
  6003
!CharacterArray class methodsFor:'documentation'!
629
2ceefe9b5a19 version at the end
Claus Gittinger <cg@exept.de>
parents: 608
diff changeset
  6004
2ceefe9b5a19 version at the end
Claus Gittinger <cg@exept.de>
parents: 608
diff changeset
  6005
version
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6006
    ^ '$Header: /cvs/stx/stx/libbasic/CharacterArray.st,v 1.465 2012-01-25 10:47:19 cg Exp $'
12058
80a7dee97d3c comments
Claus Gittinger <cg@exept.de>
parents: 11955
diff changeset
  6007
!
80a7dee97d3c comments
Claus Gittinger <cg@exept.de>
parents: 11955
diff changeset
  6008
80a7dee97d3c comments
Claus Gittinger <cg@exept.de>
parents: 11955
diff changeset
  6009
version_CVS
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6010
    ^ '$Header: /cvs/stx/stx/libbasic/CharacterArray.st,v 1.465 2012-01-25 10:47:19 cg Exp $'
629
2ceefe9b5a19 version at the end
Claus Gittinger <cg@exept.de>
parents: 608
diff changeset
  6011
! !
6809
72fee17c14b1 utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6743
diff changeset
  6012
2728
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
  6013
CharacterArray initialize!