CharacterArray.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Wed, 07 Sep 2011 17:25:40 +0100
branchjv
changeset 17859 cc167a69671c
parent 17851 09d75924b034
child 17865 598963c6ff8e
permissions -rw-r--r--
Merged with /trunk
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
     1
"
af7aeb79b25e Initial revision
claus
parents:
diff changeset
     2
 COPYRIGHT (c) 1994 by Claus Gittinger
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
     3
	      All Rights Reserved
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
     4
af7aeb79b25e Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
af7aeb79b25e Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
af7aeb79b25e Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
af7aeb79b25e Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
af7aeb79b25e Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    11
"
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
    12
"{ Package: 'stx:libbasic' }"
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
    13
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:[
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   199
	collected := self writeStream.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   200
	[str atEnd] whileFalse:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   201
	    char := str next.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   202
	    char == $' ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   203
		"/ look for another quote
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   204
		str peekOrNil ~~ $' ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   205
		    "end of string reached"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   206
		    ^ collected contents.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   207
		].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   208
		"eat doubled quote"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   209
		str next.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   210
	    ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   211
	    ((char ~~ Character return) or:[str peekOrNil ~~ Character lf]) ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   212
		"compress CRLF to LF, but keep a single CR"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   213
		collected nextPut:char.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   214
	    ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   215
	].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
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
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   231
writeStreamClass
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   232
    "the class used by writeStream"
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   233
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
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
    "
17815
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
diff changeset
   239
956b46750806 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17814
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
17859
cc167a69671c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17851
diff changeset
   285
1849
9f35f5934ec6 added msdos-latin1 en/decoder (code = #msdos850)
Claus Gittinger <cg@exept.de>
parents: 1669
diff changeset
   286
!CharacterArray class methodsFor:'cleanup'!
991
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   287
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   288
lowSpaceCleanup
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   289
    "cleanup in low-memory situations"
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   290
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   291
    DecoderTables := EncoderTables := nil
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   292
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   293
    "
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   294
     CharacterArray lowSpaceCleanup
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   295
    "
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   296
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   297
    "Created: 22.2.1996 / 16:30:30 / cg"
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   298
    "Modified: 22.2.1996 / 17:58:05 / cg"
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   299
! !
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   300
7421
4e6c6edb90d9 category rename
Claus Gittinger <cg@exept.de>
parents: 7349
diff changeset
   301
!CharacterArray class methodsFor:'encoding & decoding'!
1202
200f7cd0a457 moved encode/decode stuff into class methods / added big5/gb support
Claus Gittinger <cg@exept.de>
parents: 1145
diff changeset
   302
7876
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   303
decodeFromUTF8:aStringOrByteCollection
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   304
    "return a string which represents the characters as decoded
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   305
     from the utf8 encoded bytes, aByteCollection.
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   306
     Returns either a normal String, or a TwoByteString instance.
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   307
     Only useful, when reading twoByteStrings from external sources.
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   308
     This only handles up-to 16bit characters."
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   309
8124
ca774158b317 code cleanup (removed old obsolete encoding stuff)
Claus Gittinger <cg@exept.de>
parents: 8102
diff changeset
   310
    ^ CharacterEncoderImplementations::ISO10646_to_UTF8 decodeString:aStringOrByteCollection
7876
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   311
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   312
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   313
     CharacterArray fromUTF8Bytes:#[ 16r41 16r42 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   314
     CharacterArray fromUTF8Bytes:#[ 16rC1 16r02 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   315
     CharacterArray fromUTF8Bytes:#[ 16rE0 16r81 16r02 ]
7876
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   316
     CharacterArray fromUTF8Bytes:#[ 16rEF 16rBF 16rBF ]
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   317
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   318
   rfc2279 examples:
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   319
     CharacterArray fromUTF8Bytes:#[ 16r41 16rE2 16r89 16rA2 16rCE 16r91 16r2E ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   320
     CharacterArray fromUTF8Bytes:#[ 16rED 16r95 16r9C 16rEA 16rB5 16rAD 16rEC 16r96 16rB4 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   321
     CharacterArray fromUTF8Bytes:#[ 16rE6 16r97 16rA5 16rE6 16r9C 16rAC 16rE8 16rAA 16r9E ]
7876
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   322
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   323
   invalid:
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   324
     CharacterArray fromUTF8Bytes:#[ 16rC0 16r80 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   325
     CharacterArray fromUTF8Bytes:#[ 16rE0 16r80 16r80 ]
7876
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   326
    "
443
Claus Gittinger <cg@exept.de>
parents: 428
diff changeset
   327
! !
Claus Gittinger <cg@exept.de>
parents: 428
diff changeset
   328
1849
9f35f5934ec6 added msdos-latin1 en/decoder (code = #msdos850)
Claus Gittinger <cg@exept.de>
parents: 1669
diff changeset
   329
!CharacterArray class methodsFor:'pattern matching'!
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
   330
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
   331
matchEscapeCharacter
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
   332
    "return the character used to escape a matchCharacter
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
   333
     (i.e. make it a regular character in a matchPattern)"
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
   334
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
   335
    ^ $\
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
   336
!
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
   337
327
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   338
matchScan:matchScanArray from:matchStart to:matchStop with:aString from:start to:stop ignoreCase:ignoreCase
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   339
    "helper for match; return true if the characters from start to stop in
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   340
     aString are matching the scan in matchScan from matchStart to matchStop.
328
claus
parents: 327
diff changeset
   341
     The matchScan is as created by asMatchScanArray.
327
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   342
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   343
     This algorithm is not at all the most efficient;
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   344
     for heavy duty pattern matching, an interface (primitive) to the regex
328
claus
parents: 327
diff changeset
   345
     pattern matching package should be added."
327
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   346
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   347
    |matchEntry
327
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   348
     mStart "{ Class: SmallInteger }"
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   349
     mStop  "{ Class: SmallInteger }"
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   350
     sStart "{ Class: SmallInteger }"
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   351
     sStop  "{ Class: SmallInteger }"
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   352
     mSize  "{ Class: SmallInteger }"
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   353
     sSize  "{ Class: SmallInteger }"
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   354
     index  "{ Class: SmallInteger }"
2561
205ee33decf9 removed unused var
Claus Gittinger <cg@exept.de>
parents: 2554
diff changeset
   355
     quickCheck matchLast nextMatchEntry
986
c3a9f590146d removed unused locals
Claus Gittinger <cg@exept.de>
parents: 915
diff changeset
   356
     checkChar included|
327
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   357
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   358
    mStart := matchStart.
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   359
    mStop := matchStop.
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   360
    sStart := start.
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   361
    sStop := stop.
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   362
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   363
    [true] whileTrue:[
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   364
"/ Transcript showCR:('match: ''' , (aString copyFrom:sStart to:sStop) ,
3537
916534e86f0c fixed match
Claus Gittinger <cg@exept.de>
parents: 3527
diff changeset
   365
"/                    ''' against:' , (matchScanArray copyFrom:mStart to:mStop) printString).
916534e86f0c fixed match
Claus Gittinger <cg@exept.de>
parents: 3527
diff changeset
   366
17847
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   367
        mSize := mStop - mStart + 1.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   368
        sSize := sStop - sStart + 1.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   369
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   370
        "empty strings match"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   371
        (mSize == 0) ifTrue:[^ (sSize == 0)].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   372
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   373
        matchEntry := matchScanArray at:mStart.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   374
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   375
        "/ the most common case first:
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   376
        (sSize ~~ 0
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   377
        and:[(checkChar := (aString at:sStart)) = matchEntry]) ifTrue:[
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   378
            "advance by one and continue"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   379
            mStart := mStart + 1.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   380
            sStart := sStart + 1
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   381
        ] ifFalse:[
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   382
            (matchEntry == #any) ifTrue:[
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   383
                "restString empty -> no match"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   384
                (sSize == 0) ifTrue:[^ false].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   385
                "# matches single character"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   386
                ((sSize == 1) and:[mSize == 1]) ifTrue:[^ true].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   387
                "advance by one and continue"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   388
                mStart := mStart + 1.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   389
                sStart := sStart + 1
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   390
            ] ifFalse:[
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   391
                (matchEntry == #anyString) ifTrue:[
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   392
                    "* alone matches anything"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   393
                    (mSize == 1) ifTrue:[^ true].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   394
                    "restString empty & matchString not empty -> no match"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   395
                    (sSize == 0) ifTrue:[^ false].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   396
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   397
                    "
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   398
                     try to avoid some of the recursion by checking last
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   399
                     character and continue with shortened strings if possible
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   400
                    "
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   401
                    quickCheck := false.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   402
                    (mStop >= mStart) ifTrue:[
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   403
                        matchLast := matchScanArray at:mStop.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   404
                        (matchLast ~~ #anyString) ifTrue:[
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   405
                            (matchLast == #any) ifTrue:[
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   406
                                quickCheck := true
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   407
                            ] ifFalse:[
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   408
                                matchLast == (aString at:sStop) ifTrue:[
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   409
                                    quickCheck := true
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   410
                                ] ifFalse:[
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   411
                                    matchLast isString ifTrue:[
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   412
                                        quickCheck := matchLast includes:(aString at:sStop)
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   413
                                    ]
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   414
                                ]
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   415
                            ]
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   416
                        ]
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   417
                    ].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   418
                    quickCheck ifTrue:[
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   419
                        "
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   420
                         quickCheck ok, advance from the right
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   421
                        "
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   422
                        mStop := mStop - 1.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   423
                        sStop := sStop - 1
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   424
                    ] ifFalse:[
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   425
                        "/ no quick check;
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   426
                        "/ look for the next character(s)
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   427
                        "/ and try matching there
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   428
                        "/ (to avoid recursion)
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   429
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   430
                        mStart < mStop ifTrue:[
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   431
                            nextMatchEntry := matchScanArray at:mStart+1.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   432
                            nextMatchEntry isCharacter ifTrue:[
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   433
                                sStart <= sStop ifTrue:[
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   434
                                    [true] whileTrue:[
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   435
                                        ignoreCase ifFalse:[
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   436
                                            index := aString indexOf:nextMatchEntry startingAt:sStart
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   437
                                        ] ifTrue:[
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   438
                                            index := aString findFirst:[:c | c asLowercase = nextMatchEntry asLowercase]
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   439
                                                           startingAt:sStart.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   440
                                        ].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   441
                                        (index == 0 or:[index > sStop]) ifTrue:[
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   442
                                            ^ false
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   443
                                        ].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   444
                                        (self matchScan:matchScanArray
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   445
                                              from:(mStart + 1)
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   446
                                              to:mStop
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   447
                                              with:aString
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   448
                                              from:index
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   449
                                              to:sStop
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   450
                                              ignoreCase:ignoreCase
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   451
                                        ) ifTrue:[
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   452
                                            ^ true
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   453
                                        ].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   454
                                        sStart := index + 1.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   455
                                    ]
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   456
                                ]
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   457
                            ]
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   458
                        ].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   459
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   460
                        "
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   461
                         no quick check possible;
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   462
                         loop over all possible substrings
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   463
                        "
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   464
                        index := sStart.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   465
                        [index <= sStop] whileTrue:[
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   466
                            (self matchScan:matchScanArray
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   467
                                  from:(mStart + 1)
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   468
                                  to:mStop
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   469
                                  with:aString
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   470
                                  from:index
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   471
                                  to:sStop
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   472
                                  ignoreCase:ignoreCase
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   473
                            ) ifTrue:[
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   474
                                ^ true
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   475
                            ].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   476
                            index := index + 1
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   477
                        ].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   478
                        ^ false
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   479
                    ].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   480
                ] ifFalse:[
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   481
                    (matchEntry isString) ifTrue:[
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   482
                        "testString empty -> no match"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   483
                        (sSize == 0) ifTrue:[^ false].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   484
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   485
                        included := false.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   486
                        "/ checkChar := aString at:sStart.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   487
                        included := matchEntry includes:checkChar.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   488
                        included ifFalse:[
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   489
                            ignoreCase ifTrue:[
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   490
                                checkChar isUppercase ifTrue:[
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   491
                                    included := matchEntry includes:checkChar asLowercase.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   492
                                ] ifFalse:[
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   493
                                    included := matchEntry includes:checkChar asUppercase.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   494
                                ]
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   495
                            ].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   496
                        ].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   497
                        mStart := mStart + 1.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   498
                        mSize := mSize - 1.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   499
                        included ifFalse:[^ false].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   500
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   501
                        ((sSize == 1) and:[mSize == 0]) ifTrue:[^ true].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   502
                    ] ifFalse:[
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   503
                        "/ must be single character
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   504
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   505
                        "testString empty ?"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   506
                        (sSize == 0) ifTrue:[^ false].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   507
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   508
                        "first characters equal ?"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   509
                        "/ checkChar := aString at:sStart.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   510
                        ignoreCase ifFalse:[^ false].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   511
                        (checkChar asUppercase ~= matchEntry asUppercase) ifTrue:[^ false].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   512
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   513
                        "advance and continue"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   514
                        mStart := mStart + 1.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   515
                    ].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   516
                    "cut off 1st char and continue"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   517
                    sStart := sStart + 1
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   518
                ]
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   519
            ]
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   520
        ]
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   521
    ].
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   522
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   523
    "
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   524
     |scanArray s|
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   525
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   526
     scanArray := self matchScanArrayFrom:'*hello'.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   527
     s := 'foo bar hello world'.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   528
     CharacterArray
17847
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   529
         matchScan:scanArray
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   530
         from:1
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   531
         to:scanArray size
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   532
         with:s
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   533
         from:1
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   534
         to:s size
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   535
         ignoreCase:false
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   536
    "
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   537
    "
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   538
     |scanArray s|
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   539
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   540
     scanArray := self matchScanArrayFrom:'*hello*'.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   541
     s := 'foo bar hello world'.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   542
     CharacterArray
17847
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   543
         matchScan:scanArray
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   544
         from:1
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   545
         to:scanArray size
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   546
         with:s
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   547
         from:1
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   548
         to:s size
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   549
         ignoreCase:false
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   550
    "
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   551
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   552
    "Modified: / 24-07-2011 / 07:17:03 / cg"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   553
    "Modified (comment): / 24-07-2011 / 08:55:14 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   554
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   555
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   556
matchScanArrayFrom:aString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   557
    "scan a pattern string and decompose it into a scanArray.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   558
     This is processed faster (especially with character ranges), and
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   559
     can also be reused later. (if the same pattern is to be searched again)"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   560
9282
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   561
    ^ self matchScanArrayFrom:aString escapeCharacter:(self matchEscapeCharacter)
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   562
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   563
    "
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   564
     String matchScanArrayFrom:'*ute*'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   565
     String matchScanArrayFrom:'**ute**'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   566
     String matchScanArrayFrom:'*uter'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   567
     String matchScanArrayFrom:'\*uter'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   568
     String matchScanArrayFrom:'[cC]#mpute[rR]'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   569
     String matchScanArrayFrom:'[abcd]*'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   570
     String matchScanArrayFrom:'[a-k]*'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   571
     String matchScanArrayFrom:'*some*compl*ern*'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   572
     String matchScanArrayFrom:'[a-'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   573
     String matchScanArrayFrom:'[a-zA-Z]'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   574
     String matchScanArrayFrom:'[a-z01234A-Z]'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   575
    "
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   576
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   577
    "Modified: 2.4.1997 / 16:20:29 / cg"
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   578
!
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   579
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   580
matchScanArrayFrom:aString escapeCharacter:escape
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   581
    "scan a pattern string and decompose it into a scanArray.
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   582
     This is processed faster (especially with character ranges), and
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   583
     can also be reused later. (if the same pattern is to be searched again)"
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   584
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   585
    |coll
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   586
     idx "{ Class: SmallInteger }"
9282
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   587
     end c1 c2 matchSet previous|
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
   588
5487
cb4c5ae75c63 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5469
diff changeset
   589
    previous := nil.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   590
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   591
    coll := OrderedCollection new.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   592
    idx := 1. end := aString size.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   593
    [idx <= end] whileTrue:[
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   594
	|char this|
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   595
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   596
	char := aString at:idx.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   597
	char == $* ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   598
	    previous ~~ #anyString ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   599
		this := #anyString
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   600
	    ]
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   601
	] ifFalse:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   602
	    char == $# ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   603
		previous ~~ #anyString ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   604
		    this := #any
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   605
		]
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   606
	    ] ifFalse:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   607
		char == $[ ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   608
		    matchSet := IdentitySet new.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   609
		    idx := idx + 1.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   610
		    idx > end ifTrue:[^ nil].
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   611
		    char := aString at:idx.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   612
		    c1 := nil.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   613
		    [char ~~ $]] whileTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   614
			((char == $-) and:[c1 notNil]) ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   615
			    idx := idx + 1.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   616
			    idx > end ifTrue:[^ nil].
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   617
			    c2 := aString at:idx.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   618
			    c1 to:c2 do:[:c | matchSet add:c].
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   619
			    c1 := nil.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   620
			    idx := idx + 1.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   621
			] ifFalse:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   622
			    (char ~~ $]) ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   623
				matchSet add:char.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   624
				c1 := char.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   625
				idx := idx + 1
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   626
			    ]
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   627
			].
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   628
			idx > end ifTrue:[^ nil].
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   629
			char := aString at:idx
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   630
		    ].
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   631
		    this := matchSet asString
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   632
		] ifFalse:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   633
		    char == escape ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   634
			idx := idx + 1.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   635
			idx > end ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   636
			    "/ mhmh - what should we do here ?
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   637
			    this := char
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   638
			] ifFalse:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   639
			    this := aString at:idx.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   640
			]
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   641
		    ] ifFalse:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   642
			this := char
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   643
		    ]
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   644
		]
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   645
	    ]
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   646
	].
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   647
	this notNil ifTrue:[coll add:this. previous := this].
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   648
	idx := idx + 1
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   649
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   650
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   651
    ^ coll asArray
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   652
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   653
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   654
     String matchScanArrayFrom:'*ute*'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   655
     String matchScanArrayFrom:'**ute**'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   656
     String matchScanArrayFrom:'*uter'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   657
     String matchScanArrayFrom:'\*uter'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   658
     String matchScanArrayFrom:'[cC]#mpute[rR]'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   659
     String matchScanArrayFrom:'[abcd]*'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   660
     String matchScanArrayFrom:'[a-k]*'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   661
     String matchScanArrayFrom:'*some*compl*ern*'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   662
     String matchScanArrayFrom:'[a-'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   663
     String matchScanArrayFrom:'[a-zA-Z]'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   664
     String matchScanArrayFrom:'[a-z01234A-Z]'
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   665
    "
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   666
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   667
    "Modified: 2.4.1997 / 16:20:29 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   668
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   669
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   670
!CharacterArray class methodsFor:'queries'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   671
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   672
isAbstract
11229
4fa83d5e806d comment
Claus Gittinger <cg@exept.de>
parents: 11179
diff changeset
   673
    "Return if this class is an abstract class.
4fa83d5e806d comment
Claus Gittinger <cg@exept.de>
parents: 11179
diff changeset
   674
     True is returned for CharacterArray here; false for subclasses.
4fa83d5e806d comment
Claus Gittinger <cg@exept.de>
parents: 11179
diff changeset
   675
     Abstract subclasses must redefine again."
4fa83d5e806d comment
Claus Gittinger <cg@exept.de>
parents: 11179
diff changeset
   676
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   677
    ^ self == CharacterArray
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   678
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   679
17859
cc167a69671c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17851
diff changeset
   680
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   681
!CharacterArray methodsFor:'Compatibility-ANSI'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   682
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   683
addLineDelimiters
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   684
    "Ansi compatibility - same as withCRs"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   685
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   686
    ^ self withCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   687
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   688
    "Modified: / 13.11.2001 / 19:16:25 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   689
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   690
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   691
!CharacterArray methodsFor:'Compatibility-Dolphin'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   692
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   693
argumentCount
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   694
    "same as #numArgs - return the number of arguments a message with myself
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   695
     as selector would take."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   696
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   697
    ^  self numArgs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   698
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   699
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   700
copyExpanding:expandTable
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   701
    "return a copy of myself, with translations from the expandTable sliced in.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   702
     The argument is supposed to map from characters to either characters or strings."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   703
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   704
    |ds|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   705
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   706
    ds := WriteStream on:(self species new).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   707
    self do:[:eachChar |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   708
	|repl|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   709
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   710
	repl := expandTable at:eachChar ifAbsent:nil.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   711
	repl isNil ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   712
	    ds nextPut:eachChar
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   713
	] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   714
	    repl size == 0 ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   715
		ds nextPut:repl
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   716
	    ] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   717
		ds nextPutAll:repl
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   718
	    ]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   719
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   720
    ].
6870
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   721
    ^ ds contents.
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   722
!
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   723
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   724
formatWith:aString
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   725
    "Compatibility method - do not use in new code.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   726
     same as #bindWith: for dolphin compatibility"
6870
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   727
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   728
    ^ self bindWith:aString
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   729
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   730
    "
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   731
     'hello%1world' formatWith:'123'
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   732
    "
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   733
!
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   734
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   735
formatWith:arg1 with:arg2
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   736
    "Compatibility method - do not use in new code.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   737
     same as #bindWith: for dolphin compatibility"
6870
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   738
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   739
    ^ self bindWith:arg1 with:arg2
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   740
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   741
    "
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   742
     'hello%1 %2world' formatWith:'123' with:234
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   743
    "
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   744
!
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   745
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   746
formatWith:arg1 with:arg2 with:arg3
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   747
    "Compatibility method - do not use in new code.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   748
     same as #bindWith: for dolphin compatibility"
6870
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   749
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   750
    ^ self bindWith:arg1 with:arg2 with:arg3
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   751
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   752
    "
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   753
     'hello%1 %2 %3world' formatWith:'123' with:234 with:345
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   754
    "
6391
ff9f6df9ec4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6228
diff changeset
   755
! !
ff9f6df9ec4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6228
diff changeset
   756
7261
f35fc9cee675 method category rename
Claus Gittinger <cg@exept.de>
parents: 7247
diff changeset
   757
!CharacterArray methodsFor:'Compatibility-ST/V'!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   758
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   759
byteAt:index put:aByte
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   760
    "store a byte at given index.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   761
     This is an ST/V compatibility method."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   762
1333
d3fdca956f0d allow storing of 0-bytes (be careful with printing then ...)
Claus Gittinger <cg@exept.de>
parents: 1312
diff changeset
   763
"/    (aByte == 0) ifTrue:[
d3fdca956f0d allow storing of 0-bytes (be careful with printing then ...)
Claus Gittinger <cg@exept.de>
parents: 1312
diff changeset
   764
"/        "store a space instead"
d3fdca956f0d allow storing of 0-bytes (be careful with printing then ...)
Claus Gittinger <cg@exept.de>
parents: 1312
diff changeset
   765
"/        ^ 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
   766
"/    ].
11754
5132248cfd6e common definition of #byteAt:put between CharacterArray and Symbol
Stefan Vogel <sv@exept.de>
parents: 11632
diff changeset
   767
    ^ self basicAt:index put:(Character value:aByte)
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   768
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   769
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   770
     'hello' copy at:1 put:$H asciiValue; yourself
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   771
     'hello' copy byteAt:1 put:72; yourself
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   772
     'hello' copy byteAt:1 put:0; yourself
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   773
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   774
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   775
    "Modified: 6.5.1996 / 10:35:26 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   776
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   777
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   778
replChar:oldChar with:newChar
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   779
    "return a copy of the receiver, with all oldChars replaced
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   780
     by newChar.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   781
     This is an ST/V compatibility method."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   782
3656
347ea0413b68 use #copyReplaceAll:with:
Claus Gittinger <cg@exept.de>
parents: 3630
diff changeset
   783
    ^ self copyReplaceAll:oldChar with:newChar
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   784
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   785
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   786
     '12345678901234567890' replChar:$0 with:$*
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   787
    "
3656
347ea0413b68 use #copyReplaceAll:with:
Claus Gittinger <cg@exept.de>
parents: 3630
diff changeset
   788
347ea0413b68 use #copyReplaceAll:with:
Claus Gittinger <cg@exept.de>
parents: 3630
diff changeset
   789
    "Modified: / 18.7.1998 / 22:52:57 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   790
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   791
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   792
replChar:oldChar withString:newString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   793
    "return a copy of the receiver, with all oldChars replaced
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   794
     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
   795
     This is an ST/V compatibility method."
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|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   798
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   799
    tmpStream := WriteStream on:(self class new).
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   800
    self do:[:element |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   801
	element = oldChar ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   802
	    tmpStream nextPutAll:newString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   803
	] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   804
	    tmpStream nextPut:element
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   805
	].
608
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
    ^ tmpStream contents
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   808
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   809
   "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   810
     '12345678901234567890' replChar:$0 withString:'foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   811
     'a string with spaces' replChar:$  withString:' foo '
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   812
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   813
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   814
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   815
replString:subString withString:newString
4244
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   816
    "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
   817
     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
   818
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
   819
    ^ self copyReplaceString:subString withString:newString
4244
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   820
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   821
   "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   822
     '12345678901234567890' replString:'123' withString:'OneTwoThree'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   823
     '12345678901234567890' replString:'123' withString:'*'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   824
     '12345678901234567890' replString:'234' withString:'foo'
4244
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   825
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   826
     ('a string with spaces' replChar:$  withString:' foo ')
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   827
	replString:'foo' withString:'bar'
4244
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   828
    "
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   829
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
   830
    "Modified: / 12-05-2004 / 12:00:27 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   831
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   832
9275
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   833
subString:start to:end
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   834
    ^ self copyFrom:start to:end
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   835
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   836
   "
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   837
     '12345678901234567890' subString:3 to:8
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   838
    "
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   839
!
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   840
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   841
trimBlanks
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   842
    "return a copy of the receiver without leading
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   843
     and trailing spaces.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   844
     This is an ST/V compatibility method."
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
    ^ self withoutSpaces
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   847
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   848
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   849
     '    spaces at beginning' trimBlanks
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   850
     'spaces at end    ' trimBlanks
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   851
     '    spaces at beginning and end     ' trimBlanks
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   852
     'no spaces' trimBlanks
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   853
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   854
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   855
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   856
!CharacterArray methodsFor:'Compatibility-Squeak'!
4409
86e049b21f8d added #includesSubstring:caseSensitive:
Claus Gittinger <cg@exept.de>
parents: 4389
diff changeset
   857
6148
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   858
asDate
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   859
    "Many allowed forms, see Date.readFrom:"
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   860
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   861
    ^ Date readFrom: (ReadStream on: self)
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   862
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   863
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   864
     '30 Apr 1999' asDate dayName capitalized
6148
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   865
    "
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   866
!
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   867
8971
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
   868
asUrl
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
   869
    ^ self asURL
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
   870
!
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
   871
10840
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   872
asWideString
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   873
    ^ self asTwoByteString
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   874
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   875
    "
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   876
     'abc' asWideString
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   877
    "
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   878
!
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   879
4989
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   880
capitalized
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   881
    ^ self asUppercaseFirst
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   882
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
     'hello' capitalized
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   885
    "
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   886
!
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   887
10841
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   888
caseInsensitiveLessOrEqual:aString
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   889
    ^ (self compareCaselessWith:aString) <= 0
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   890
!
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   891
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   892
caseSensitiveLessOrEqual:aString
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   893
    ^ self <= aString
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   894
!
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   895
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   896
charactersExactlyMatching:aString
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   897
    |idx nMax|
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   898
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   899
    nMax :=(self size) min:(aString size).
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   900
    idx := 1.
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   901
    [idx <= nMax] whileTrue:[
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   902
	(self at:idx) = (aString at:idx) ifFalse:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   903
	    ^ idx - 1
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   904
	].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   905
	idx := idx + 1.
10841
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
    ^ nMax
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   908
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   909
    "
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   910
     'abc' charactersExactlyMatching:'abc'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   911
     'abc' charactersExactlyMatching:'abcd'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   912
     'abcd' charactersExactlyMatching:'abc'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   913
     'abc' charactersExactlyMatching:'abd'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
   914
     'abc' charactersExactlyMatching:'xxx'
10841
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   915
    "
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   916
!
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   917
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   918
endsWithDigit
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   919
    "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
   920
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   921
    ^ self size > 0 and: [self last isDigit]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   922
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   923
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
   924
findDelimiters:delimiters startingAt:start
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   925
    "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
   926
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   927
    |idx|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   928
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   929
    idx := self indexOfAny:delimiters startingAt:start.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   930
    idx == 0 ifTrue:[^ self size + 1].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   931
    ^ idx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   932
"/start to: self size do: [:i |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   933
"/        |char|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   934
"/
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   935
"/        char := self at: i.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   936
"/        delimiters do: [:delim | delim = char ifTrue: [^ i]]
8971
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
"/    ^ self size + 1
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
   939
!
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
   940
17859
cc167a69671c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17851
diff changeset
   941
findTokens:delimiterOrDelimiters
7270
37248a67718a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7265
diff changeset
   942
    "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
   943
17859
cc167a69671c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17851
diff changeset
   944
    delimiterOrDelimiters size == 0 ifTrue:[
cc167a69671c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17851
diff changeset
   945
        ^ self asCollectionOfSubstringsSeparatedBy:delimiterOrDelimiters
cc167a69671c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17851
diff changeset
   946
    ] ifFalse:[
cc167a69671c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17851
diff changeset
   947
        ^ self asCollectionOfSubstringsSeparatedByAny:delimiterOrDelimiters
cc167a69671c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17851
diff changeset
   948
    ].
7270
37248a67718a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7265
diff changeset
   949
37248a67718a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7265
diff changeset
   950
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   951
     'a|b#c||e' findTokens:#($# $|)
17859
cc167a69671c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17851
diff changeset
   952
     'a|b#c||e' findTokens:$|
cc167a69671c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17851
diff changeset
   953
    "
cc167a69671c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17851
diff changeset
   954
cc167a69671c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17851
diff changeset
   955
    "Modified: / 04-09-2011 / 20:31:21 / cg"
cc167a69671c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17851
diff changeset
   956
    "Modified (comment): / 05-09-2011 / 04:25:28 / cg"
4981
2ee8cd2c4c8e squeak compatibility
ps
parents: 4974
diff changeset
   957
!
2ee8cd2c4c8e squeak compatibility
ps
parents: 4974
diff changeset
   958
4974
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
   959
includesSubString:aString
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
   960
    "return true, if a substring is contained in the receiver.
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
   961
     The compare is case sensitive."
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
    ^ self includesString:aString
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
   964
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
   965
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   966
     'hello world' includesSubString:'Hel'
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   967
     'hello world' includesSubString:'hel'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   968
     'hello world' includesSubString:'llo'
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
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   973
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   974
11178
668d5d9a4d5d added #includesSubString:caseSensitive:
sr
parents: 11062
diff changeset
   975
includesSubString:aString caseSensitive:caseSensitive
11179
178086a92325 *** empty log message ***
sr
parents: 11178
diff changeset
   976
    ^ self includesSubstring:aString caseSensitive:caseSensitive
11178
668d5d9a4d5d added #includesSubString:caseSensitive:
sr
parents: 11062
diff changeset
   977
!
668d5d9a4d5d added #includesSubString:caseSensitive:
sr
parents: 11062
diff changeset
   978
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   979
includesSubstring:aString caseSensitive:caseSensitive
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
   980
    "return true, if a substring is contained in the receiver.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   981
     The argument, caseSensitive controls if case is ignored in the compare."
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
    "/ for now,  a q&d hack ...
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   984
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   985
    caseSensitive ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   986
	^ self asLowercase includesString:aString asLowercase
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   987
    ].
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
   988
    ^ self includesString:aString
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
   989
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
   990
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   991
     'hello world' includesSubstring:'Hel' caseSensitive:true
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   992
     'hello world' includesSubstring:'Hel' caseSensitive:false
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   993
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   994
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   995
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   996
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   997
!
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
   998
6979
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
   999
isAllDigits
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1000
    "Answer whether the receiver's characters are all digits"
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1001
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1002
    ^ self conform:[:eachChar | eachChar isDigit]
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1003
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1004
    "
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1005
     'hello world' isAllDigits
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1006
     '12344' isAllDigits
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1007
    "
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1008
!
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1009
17859
cc167a69671c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17851
diff changeset
  1010
isWideString
cc167a69671c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17851
diff changeset
  1011
    ^ self bitsPerCharacter > 8
cc167a69671c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17851
diff changeset
  1012
cc167a69671c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17851
diff changeset
  1013
    "Created: / 05-09-2011 / 23:13:16 / cg"
cc167a69671c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17851
diff changeset
  1014
!
cc167a69671c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17851
diff changeset
  1015
4890
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1016
lastSpacePosition
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1017
    ^ self lastIndexOfSeparator
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1018
!
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1019
7022
0c3c73f83b7f padded:to:with: - for squeak
penk
parents: 7020
diff changeset
  1020
padded:leftOrRight to:paddedSize with:padCharacter
0c3c73f83b7f padded:to:with: - for squeak
penk
parents: 7020
diff changeset
  1021
    leftOrRight == #left ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1022
	^ self leftPaddedTo:paddedSize with:padCharacter
9190
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
    ^ self paddedTo:paddedSize with:padCharacter
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1025
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1026
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1027
     'hello' padded:#right to:10 with:$.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1028
     'hello' padded:#left to:10 with:$.
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
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1031
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1032
skipDelimiters:delimiters startingAt:start
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1033
    "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
  1034
     that does NOT match one of the delimiters.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1035
     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
  1036
     Assumes the delimiters to be a non-empty string."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1037
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1038
    start to:self size do:[:i |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1039
	delimiters detect:[:delim | delim = (self at:i) ] ifNone:[ ^ i ]
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
    ^ self size + 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1042
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1043
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1044
     '123***7890' skipDelimiters:'*' startingAt:4
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1045
     '123***7890' skipDelimiters:'*' startingAt:3
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1046
     '123***7890' skipDelimiters:'*' startingAt:10
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1047
     '123*******' skipDelimiters:'*' startingAt:10
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1048
    "
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1049
!
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1050
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1051
substrings
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1052
    ^ self asCollectionOfWords
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1053
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
     'foo bar baz' substrings
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1056
    "
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1057
!
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1058
17747
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  1059
substringsSeparatedBy:separatorCharacter
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  1060
    ^ self asCollectionOfSubstringsSeparatedBy:separatorCharacter
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  1061
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  1062
    "
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  1063
     'foo bar, baz' substringsSeparatedBy:$,
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  1064
    "
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  1065
!
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  1066
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1067
truncateTo:smallSize
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1068
    "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
  1069
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1070
    self size <= smallSize ifTrue:[^ self].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1071
    ^ self copyFrom: 1 to: smallSize
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1072
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1073
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1074
     'hello world' truncateTo:5
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1075
     'hello' truncateTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1076
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1077
     'hello world' copyTo:5
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1078
     'hello' copyTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1079
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1080
!
5795
d67a8ff4d98e added #truncateTo:
Claus Gittinger <cg@exept.de>
parents: 5794
diff changeset
  1081
4890
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1082
withBlanksTrimmed
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1083
    "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
  1084
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1085
    ^ self withoutSpaces
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1086
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1087
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1088
     '  hello    world    ' withBlanksTrimmed
4890
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
!
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1094
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1095
withNoLineLongerThan: aNumber
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1096
    "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
  1097
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1098
    | listOfLines currentLast currentStart resultString putativeLast putativeLine crPosition |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1099
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1100
    aNumber isNumber not | (aNumber < 1) ifTrue: [self error: 'too narrow'].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1101
    listOfLines _ OrderedCollection new.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1102
    currentLast _ 0.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1103
    [currentLast < self size] whileTrue:
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1104
	    [currentStart _ currentLast + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1105
	    putativeLast _ (currentStart + aNumber - 1) min: self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1106
	    putativeLine _ self copyFrom: currentStart to: putativeLast.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1107
	    (crPosition _ putativeLine indexOf: Character cr) > 0 ifTrue:
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1108
		    [putativeLast _ currentStart + crPosition - 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1109
		    putativeLine _ self copyFrom: currentStart to: putativeLast].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1110
	    currentLast _ putativeLast == self size
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1111
		    ifTrue:
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1112
			    [putativeLast]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1113
		    ifFalse:
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1114
			    [currentStart + putativeLine lastSpacePosition - 1].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1115
	    currentLast <= currentStart ifTrue:
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1116
		    ["line has NO spaces; baleout!!"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1117
		    currentLast _ putativeLast].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1118
	    listOfLines add: (self copyFrom: currentStart to: currentLast) withBlanksTrimmed].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1119
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1120
    listOfLines size > 0 ifFalse: [^ ''].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1121
    resultString _ listOfLines first.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1122
    2 to: listOfLines size do:
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1123
	    [:i | resultString _ resultString, Character cr asString, (listOfLines at: i)].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1124
    ^ resultString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1125
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1126
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1127
     #(5 7 20) collect:
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1128
	[: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
  1129
    "
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1130
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1131
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1132
10883
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1133
!
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1134
17734
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  1135
withSqueakLineEndings
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  1136
    "assume the string is textual, and that CR, LF, and CRLF are all 
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  1137
    valid line endings.  Replace each occurence with a single CR"
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  1138
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  1139
    ^ self asStringCollection asStringWith:Character cr.
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  1140
!
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  1141
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1142
withoutLeading: char
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1143
    "return a copy of myself without leading a char.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1144
     Returns an empty string, if the receiver consist only of a char."
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1145
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1146
    ^ self withoutLeadingForWhich:[:ch | ch = char]
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1147
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1148
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1149
     '****foo****' withoutLeading: $*      
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1150
     'foo****'     withoutLeading: $*      
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1151
     '*'           withoutLeading: $*                 
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1152
     ''            withoutLeading: $*         
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1153
     '****foo'     withoutLeading: $*        
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1154
     '*******'     withoutLeading: $*             
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1155
     'foo'         withoutLeading: $*        
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1156
     'f***o***o'   withoutLeading: $*         
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1157
     ('**' , Character tab asString , '*foo***') withoutLeading: $* inspect
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1158
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1159
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1160
11565
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1161
withoutTrailing:char
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1162
    "return a copy of myself without trailing char.
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1163
     Returns an empty string, if the receiver consist only of char."
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1164
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1165
    ^ self withoutTrailingForWhich:[:ch | ch = char]
10883
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1166
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1167
    "
11565
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1168
     '    foo....' withoutTrailing:$. 
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1169
     'foo....'     withoutTrailing:$.   
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1170
     '    foo'     withoutTrailing:$.    
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1171
     '.......'     withoutTrailing:$.  
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1172
     'foo'         withoutTrailing:$.  
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1173
    "
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1174
!
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1175
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1176
withoutTrailingBlanks
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1177
    "return a copy of myself without trailing spaces.
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1178
     Notice: this does NOT remove tabs, newline or any other whitespace.
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1179
     Returns an empty string, if the receiver consist only of spaces."
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1180
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1181
    ^ self withoutTrailing:Character space
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1182
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1183
    "
10883
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
     'foo    '     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
     '       '     withoutTrailingBlanks
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1188
     'foo'         withoutTrailingBlanks
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1189
     ('  ' , Character tab asString , ' foo   ') withoutTrailingBlanks inspect
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1190
     ('   foo' , Character tab asString) withoutTrailingBlanks inspect
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1191
    "
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1192
! !
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
!CharacterArray methodsFor:'Compatibility-V''Age'!
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1195
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1196
addLineDelimiter
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1197
    "replace all '\'-characters by line delimiter (cr) - characters.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1198
     This has been added for VisualAge compatibility."
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
    ^ self withCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1201
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1202
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1203
bindWith:aString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1204
    "return a copy of the receiver, where a '%1' escape is
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1205
     replaced by aString.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1206
     This has been added for VisualAge compatibility."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1207
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1208
    ^ self expandPlaceholdersWith:(Array with:aString)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1209
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1210
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1211
     'do you like %1 ?' bindWith:'smalltalk'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1212
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1213
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1214
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1215
bindWith:string1 with:string2
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1216
    "return a copy of the receiver, where a '%1' escape is
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1217
     replaced by string1 and '%2' is replaced by string2.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1218
     This has been added for VisualAge compatibility."
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
    ^ self expandPlaceholdersWith:(Array with:string1 with:string2)
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1221
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1222
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1223
     'do you prefer %1 or rather %2 ?'
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1224
	bindWith:'smalltalk' with:'c++'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1225
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1226
!
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1227
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1228
bindWith:str1 with:str2 with:str3
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1229
    "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
  1230
     are replaced by str1, str2 and str3 respectively.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1231
     This has been added for VisualAge compatibility."
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
    ^ self expandPlaceholdersWith:(Array with:str1 with:str2 with:str3)
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1234
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1235
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1236
     'do you prefer %1 or rather %2 (not talking about %3) ?'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1237
	bindWith:'smalltalk' with:'c++' with:'c'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1238
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1239
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1240
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1241
bindWith:str1 with:str2 with:str3 with:str4
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1242
    "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
  1243
     are replaced by str1, str2, str3 and str4 respectively.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1244
     This has been added for VisualAge compatibility."
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
    ^ self expandPlaceholdersWith:(Array with:str1 with:str2 with:str3 with:str4)
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1247
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1248
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1249
     '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
  1250
	bindWith:'smalltalk' with:'c++' with:'c' with:'assembler'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1251
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1252
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1253
2344
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1254
bindWith:str1 with:str2 with:str3 with:str4 with:str5
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1255
    "return a copy of the receiver, where a '%1' .. '%5' escapes
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1256
     are replaced by str1 .. str5 respectively.
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1257
     This has been added for VisualAge compatibility."
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
    ^ 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
  1260
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1261
    "Created: 31.1.1997 / 16:25:42 / cg"
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1262
!
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1263
5343
bac9bc59a698 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5342
diff changeset
  1264
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
  1265
    "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
  1266
     are replaced by str1 .. str6 respectively.
5343
bac9bc59a698 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5342
diff changeset
  1267
     This has been added for VisualAge compatibility."
bac9bc59a698 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5342
diff changeset
  1268
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1269
    ^ self expandPlaceholdersWith:(Array with:str1 with:str2
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1270
					 with:str3 with:str4
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1271
					 with:str5 with:str6)
11524
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1272
!
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1273
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1274
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
  1275
    "return a copy of the receiver, where a '%1' .. '%7' escapes
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1276
     are replaced by str1 .. str7 respectively.
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1277
     This has been added for VisualAge compatibility."
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1278
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1279
    ^ self expandPlaceholdersWith:(Array with:str1 with:str2
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1280
					 with:str3 with:str4
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1281
					 with:str5 with:str6
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1282
					 with:str7)
5343
bac9bc59a698 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5342
diff changeset
  1283
!
bac9bc59a698 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5342
diff changeset
  1284
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1285
bindWithArguments:anArrayOfStrings
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1286
    "return a copy of the receiver, where a '%i' escape
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1287
     is replaced by the coresponding string from the argument array.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1288
     '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
  1289
     This has been added for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1290
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1291
    ^ self expandPlaceholdersWith:anArrayOfStrings
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1292
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1293
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1294
     'do you prefer %1 or rather %2 (not talking about %3) ?'
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1295
        bindWithArguments:#('smalltalk' 'c++' 'c')
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1296
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1297
     'do you %(what) ?'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1298
        bindWithArguments:(Dictionary new at:#'what' put:'understand'; yourself)
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1299
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1300
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1301
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1302
subStrings
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1303
    "return an array consisting of all words contained in the receiver.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1304
     Words are separated by whitespace.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1305
     This has been added for VisualAge compatibility."
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
    ^ self asCollectionOfWords
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1308
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
     'hello world, this is smalltalk' subStrings
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
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1313
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1314
subStrings:separatorCharacter
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1315
    "return an array consisting of all words contained in the receiver.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1316
     Words are separated by separatorCharacter.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1317
     This has been added for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1318
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1319
    ^ self asCollectionOfSubstringsSeparatedBy:separatorCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1320
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
     'foo:bar:baz:smalltalk' subStrings:$:
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
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1325
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1326
trimSeparators
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1327
    "return a copy of the receiver without leading and trailing whiteSpace"
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
    ^ self withoutSeparators
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1330
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1331
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1332
!CharacterArray methodsFor:'Compatibility-VW'!
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1333
6139
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1334
asLogicalFileSpecification
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1335
    ^ self asFilename
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
    "Created: / 30.10.2001 / 17:29:53 / cg"
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1338
!
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1339
6119
b6cee2c2b2ea +asQualifiedReference
Claus Gittinger <cg@exept.de>
parents: 5964
diff changeset
  1340
asQualifiedReference
b6cee2c2b2ea +asQualifiedReference
Claus Gittinger <cg@exept.de>
parents: 5964
diff changeset
  1341
    ^ BindingReference pathString:(self string)
b6cee2c2b2ea +asQualifiedReference
Claus Gittinger <cg@exept.de>
parents: 5964
diff changeset
  1342
b6cee2c2b2ea +asQualifiedReference
Claus Gittinger <cg@exept.de>
parents: 5964
diff changeset
  1343
!
b6cee2c2b2ea +asQualifiedReference
Claus Gittinger <cg@exept.de>
parents: 5964
diff changeset
  1344
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1345
expandMacros
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1346
    "ST80 compatibility - expand '<..>' macros with
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1347
     argument strings. Similar to #bindWith:.
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1348
     Read the comment in #expandMacrosWithArguments: about
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1349
     limited compatibility issues."
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
    ^ self expandMacrosWithArguments:#()
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1352
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
     'hello<n>foo' expandMacros
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1355
    "
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1356
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1357
    "Modified: / 18.6.1998 / 16:03:02 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1358
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1359
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1360
expandMacrosWith:arg
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1361
    "ST80 compatibility - expand '<..>' macros with
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1362
     argument strings. Similar to #bindWith:.
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1363
     Read the comment in #expandMacrosWithArguments: about
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1364
     limited compatibility issues."
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1365
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1366
    ^ self expandMacrosWithArguments:(Array with:arg)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1367
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1368
    "Created: / 1.11.1997 / 13:01:28 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1369
    "Modified: / 1.11.1997 / 13:30:50 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1370
!
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1371
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1372
expandMacrosWith:arg1 with:arg2
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1373
    "ST80 compatibility - expand '<..>' macros with
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1374
     argument strings. Similar to #bindWith:.
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1375
     Read the comment in #expandMacrosWithArguments: about
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1376
     limited compatibility issues."
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
    ^ self expandMacrosWithArguments:(Array with:arg1 with:arg2)
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
    "Modified: / 6.7.1998 / 21:58:14 / cg"
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1381
!
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1382
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1383
expandMacrosWith:arg1 with:arg2 with:arg3
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1384
    "ST80 compatibility - expand '<..>' macros with
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1385
     argument strings. Similar to #bindWith:.
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1386
     Read the comment in #expandMacrosWithArguments: about
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1387
     limited compatibility issues."
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
    ^ self expandMacrosWithArguments:(Array with:arg1 with:arg2 with:arg3)
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1390
!
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1391
10353
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1392
expandMacrosWith:arg1 with:arg2 with:arg3 with:arg4
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1393
    "ST80 compatibility - expand '<..>' macros with
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1394
     argument strings. Similar to #bindWith:.
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1395
     Read the comment in #expandMacrosWithArguments: about
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1396
     limited compatibility issues."
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
    ^ 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
  1399
!
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1400
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1401
expandMacrosWithArguments:argArray
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1402
    "ST80 compatibility - expand '<..>' macros with
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1403
     argument strings. Similar to #bindWith:.
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1404
     WARNING: possibly not all ST80 expansions are supported here."
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
    "/ supported expansions:
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1407
    "/
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1408
    "/   <#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
  1409
    "/   <#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
  1410
    "/   <#?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
  1411
    "/              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
  1412
    "/   <n>        replace by a newLine character
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1413
    "/   <t>        replace by a tab character
6834
eba4b58b8692 fixed expandMacros (%-escape)
Claus Gittinger <cg@exept.de>
parents: 6810
diff changeset
  1414
    "/   %X         the X character itself
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1415
8999
f3fda66ea51e #expandMacrosWithArguments: - be mor friendly to xml strings.
Stefan Vogel <sv@exept.de>
parents: 8971
diff changeset
  1416
    |in out c fmt nr arg s1 s2 peekc|
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1417
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1418
    in := self readStream.
10721
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1419
    out := CharacterWriteStream on:(self species uninitializedNew:self size).
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1420
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1421
    [in atEnd] whileFalse:[
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1422
	c := in next.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1423
	c == $% ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1424
	    c := in next.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1425
	    out nextPut:c
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1426
	] ifFalse:[c ~~ $< ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1427
	    out nextPut:c.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1428
	] ifFalse:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1429
	    peekc := in peek.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1430
	    [peekc == $<] whileTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1431
		out nextPut:$<.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1432
		peekc := in nextPeek.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1433
	    ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1434
	    peekc == $n ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1435
		peekc := in nextPeek.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1436
		peekc == $> ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1437
		    in next.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1438
		    out cr.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1439
		] ifFalse:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1440
		    out nextPutAll:'<n'.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1441
		]
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1442
	    ] ifFalse:[peekc == $t ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1443
		peekc := in nextPeek.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1444
		peekc == $> ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1445
		    in next.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1446
		    out tab.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1447
		] ifFalse:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1448
		    out nextPutAll:'<t'.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1449
		]
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1450
	    ] ifFalse:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1451
		peekc isDigit ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1452
		    "start an argument expansion ..."
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1453
		    nr := Integer readFrom:in onError:nil.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1454
		    nr isNil ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1455
			"this cannot happen (there is at least one digit)"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1456
			self error:'invalid format' mayProceed:true.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1457
			^ self
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1458
		    ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1459
		    fmt := in next.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1460
		    (fmt ~~ $? and:[in peek ~~ $>]) ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1461
			out nextPut:$<.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1462
			nr printOn:out.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1463
			out nextPut:fmt.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1464
		    ] ifFalse:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1465
			(nr between:1 and:argArray size) ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1466
			    arg := argArray at:nr.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1467
			] ifFalse:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1468
			    arg := ''
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1469
			].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1470
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1471
			fmt == $p ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1472
			    "expand with args printString"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1473
			    arg printOn:out.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1474
			] ifFalse:[fmt == $s ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1475
			    "expand with arg itself"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1476
			    arg isText ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1477
				out contentsSpecies isText ifFalse:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1478
				    out := (WriteStream on:Text new) nextPutAll:out contents; yourself.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1479
				].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1480
				out nextPutAll:arg.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1481
			    ] ifFalse:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1482
				out nextPutAll:arg "asString" string.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1483
			    ]
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1484
			] ifFalse:[fmt == $? ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1485
			    s1 := in upTo:$:.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1486
			    s2 := in nextUpTo:$>.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1487
			    arg == true ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1488
				out nextPutAll:s1
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1489
			    ] ifFalse:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1490
				out nextPutAll:s2
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1491
			    ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1492
			] ifFalse:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1493
			    "what does VW do here ?"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1494
			    self error:'invalid format' mayProceed:true.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1495
			    ^ self
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1496
			]]].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1497
			c := in next.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1498
			c ~~ $> ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1499
			    "what does VW do here ?"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1500
			    self error:'invalid format' mayProceed:true.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1501
			    ^ self
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1502
			]
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1503
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1504
		    ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1505
		] ifFalse:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1506
		    out nextPut:$<.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1507
		].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1508
	    ]].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1509
	]].
5964
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
    ^ out contents
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1512
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1513
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1514
     'hello <1s> how are you' expandMacrosWith:(OperatingSystem getLoginName)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1515
     'one plus one is <1p>' expandMacrosWith:2
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1516
    "
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1517
10721
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1518
    "Modified: / 18-09-2007 / 22:50:43 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1519
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1520
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1521
isCharacters
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1522
    "added for visual works compatibility"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1523
    ^ true
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1524
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1525
17747
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  1526
17859
cc167a69671c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17851
diff changeset
  1527
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1528
!CharacterArray methodsFor:'character searching'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1529
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1530
includesMatchCharacters
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  1531
    "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
  1532
     for match operations; false if not.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1533
     Here, do not care for $\ escapes"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1534
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1535
    ^ self includesAny:'*#['
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1536
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1537
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1538
     '*foo' includesMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1539
     '\*foo' includesMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1540
     '\*foo' includesUnescapedMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1541
     '*foo' includesMatchCharacters
2519
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
     'foo\*' includesMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1545
     'foo\' includesMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1546
    "
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1547
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1548
    "Modified: 2.4.1997 / 18:12:34 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1549
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1550
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1551
includesSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1552
    "return true, if the receiver contains any whitespace characters"
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
    ^ (self indexOfSeparator ~~ 0)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1555
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1556
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1557
     'hello world' includesSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1558
     'helloworld' includesSeparator
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
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1561
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1562
includesUnescapedMatchCharacters
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1563
    "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
  1564
     for match operations; false if not.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1565
     Here, care for $\ escapes"
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1566
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  1567
    |idx sz specialChars escape|
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1568
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1569
    idx := 1.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1570
    sz := self size.
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  1571
    specialChars := '*#[\'.
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  1572
    (escape := self class matchEscapeCharacter) ~~ $\ ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1573
	specialChars := specialChars copy.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1574
	specialChars at:specialChars size put:escape
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  1575
    ].
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  1576
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1577
    [true] whileTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1578
	idx := self indexOfAny:specialChars startingAt:idx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1579
	idx == 0 ifTrue:[^ false].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1580
	(self at:idx) == escape ifFalse:[^ true].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1581
	idx := idx + 2.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1582
	idx > sz ifTrue:[^ false].
8874
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
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1585
    "
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
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1588
     '\\foo' includesUnescapedMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1589
     '\\\$foo' includesUnescapedMatchCharacters
2519
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
     'foo\*' includesUnescapedMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1594
     'foo\' includesUnescapedMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1595
    "
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1596
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1597
    "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
  1598
    "Created: 2.4.1997 / 17:23:26 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1599
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1600
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1601
indexOfControlCharacterStartingAt:startIndex
3668
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1602
    "return the index of the next control character;
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1603
     starting the search at startIndex, searching forward;
3668
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1604
     that is a character with asciiValue < 32.
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1605
     Return 0 if none is found."
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1606
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1607
    |start  "{ Class: SmallInteger }"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1608
     mySize "{ Class: SmallInteger }"|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1609
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1610
    start := startIndex.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1611
    mySize := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1612
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1613
    start to:mySize do:[:index |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1614
	(self at:index) isControlCharacter ifTrue:[^ index]
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
    ^ 0
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1617
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1618
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1619
     'hello world' asTwoByteString            indexOfControlCharacterStartingAt:1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1620
     'hello world\foo' withCRsasTwoByteString indexOfControlCharacterStartingAt:1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1621
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1622
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1623
    "Modified: / 21.7.1998 / 17:25:07 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1624
!
3668
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1625
8541
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1626
indexOfNonSeparator
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1627
    "return the index of the first non-whitespace character.
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1628
     return 0 if no non-separator was found"
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1629
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1630
    ^ self indexOfNonSeparatorStartingAt:1.
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1631
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1632
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1633
     '    hello world' indexOfNonSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1634
     '    ' indexOfNonSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1635
     'a   ' indexOfNonSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1636
     'abc' indexOfNonSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1637
     ' ' indexOfNonSeparator
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1638
     '' indexOfNonSeparator
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
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1641
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1642
indexOfNonSeparatorStartingAt:startIndex
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1643
    "return the index of the next non-whitespace character,
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1644
     starting the search at startIndex, searching forward;
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1645
     return 0 if no non-separator was found"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1646
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1647
    |start  "{ Class: SmallInteger }"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1648
     mySize "{ Class: SmallInteger }"|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1649
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1650
    start := startIndex.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1651
    mySize := self size.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1652
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1653
    start to:mySize do:[:index |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1654
	(self at:index) isSeparator ifFalse:[^ index]
608
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
    ^ 0
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1657
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1658
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1659
     '    hello world' indexOfNonSeparatorStartingAt:1
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1660
     '    ' indexOfNonSeparatorStartingAt:1
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1661
     'a   ' indexOfNonSeparatorStartingAt:2
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1662
    "
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1663
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1664
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1665
     |s index1 index2|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1666
     s := '   foo    bar      baz'.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1667
     index1 := s indexOfNonSeparatorStartingAt:1.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1668
     index2 := s indexOfSeparatorStartingAt:index1.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1669
     s copyFrom:index1 to:index2 - 1
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1670
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1671
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1672
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1673
indexOfSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1674
    "return the index of the first whitespace character;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1675
     starting the search at the beginning, searching forward;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1676
     return 0 if no separator was found"
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
    ^ self indexOfSeparatorStartingAt:1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1679
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1680
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1681
     'hello world' indexOfSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1682
     'helloworld' indexOfSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1683
     'hello   ' indexOfSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1684
     '   hello' indexOfSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1685
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1686
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1687
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1688
indexOfSeparatorStartingAt:startIndex
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1689
    "return the index of the next whitespace character,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1690
     starting the search at startIndex, searching forward;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1691
     return 0 if no separator was found"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1692
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1693
    |start  "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1694
     mySize "{ Class: SmallInteger }"|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1695
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1696
    start := startIndex.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1697
    mySize := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1698
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1699
    start to:mySize do:[:index |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1700
	(self at:index) isSeparator ifTrue:[^ index]
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
    ^ 0
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1703
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1704
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1705
     'hello world' indexOfSeparatorStartingAt:3
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1706
     ' hello world' indexOfSeparatorStartingAt:3
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1707
     'hello world ' indexOfSeparatorStartingAt:3
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1708
     'hello world ' indexOfSeparatorStartingAt:6
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1709
     'hello world ' indexOfSeparatorStartingAt:7
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1710
     'helloworld ' indexOfSeparatorStartingAt:7
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1711
     'helloworld' indexOfSeparatorStartingAt:7
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1712
    "
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1713
!
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1714
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1715
lastIndexOfSeparator
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1716
    "return the last index of the whitespace character.
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1717
     (i.e. start the search at the end and search backwards);
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1718
     Returns 0 if no separator is found."
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1719
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1720
    ^ self lastIndexOfSeparatorStartingAt:(self size)
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1721
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1722
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1723
     'hello world' lastIndexOfSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1724
     'helloworld' lastIndexOfSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1725
     'hel lo wor ld' lastIndexOfSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1726
     'hel   ' lastIndexOfSeparator 6
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1727
    "
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1728
!
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1729
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1730
lastIndexOfSeparatorStartingAt:startIndex
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1731
    "return the index of the previous whitespace character,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1732
     starting the search at startIndex (and searching backwards);
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1733
     returns 0 if no separator was found"
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  "{ Class: SmallInteger }"|
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 := startIndex.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1738
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1739
    start to:1 by:-1 do:[:index |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1740
	(self at:index) isSeparator ifTrue:[^ index]
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
    ^ 0
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1743
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1744
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1745
     'hello world' lastIndexOfSeparatorStartingAt:3
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1746
     'hello world' lastIndexOfSeparatorStartingAt:7
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1747
     'helloworld' lastIndexOfSeparatorStartingAt:7
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1748
     ' helloworld' lastIndexOfSeparatorStartingAt:7
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1749
    "
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1750
! !
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1751
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1752
!CharacterArray methodsFor:'comparing'!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1753
6742
292775fda600 avoid endless recursion when comparing int < string
Claus Gittinger <cg@exept.de>
parents: 6655
diff changeset
  1754
< aString
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1755
    "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
  1756
     receiver is greater than the argument. Otherwise return false.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1757
     This comparison is based on the elements ascii code -
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1758
     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
  1759
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1760
    |mySize    "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1761
     otherSize "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1762
     n         "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1763
     c1 c2|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1764
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1765
    mySize := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1766
    otherSize := aString string size.
6742
292775fda600 avoid endless recursion when comparing int < string
Claus Gittinger <cg@exept.de>
parents: 6655
diff changeset
  1767
    n := mySize min:otherSize.
292775fda600 avoid endless recursion when comparing int < string
Claus Gittinger <cg@exept.de>
parents: 6655
diff changeset
  1768
292775fda600 avoid endless recursion when comparing int < string
Claus Gittinger <cg@exept.de>
parents: 6655
diff changeset
  1769
    1 to:n do:[:index |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1770
	c1 := self at:index.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1771
	c2 := aString at:index.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1772
	(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
  1773
    ].
292775fda600 avoid endless recursion when comparing int < string
Claus Gittinger <cg@exept.de>
parents: 6655
diff changeset
  1774
    ^ mySize < otherSize
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1775
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1776
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1777
= aString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1778
    "Compare the receiver with the argument and return true if the
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1779
     receiver is equal to the argument. Otherwise return false.
1252
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  1780
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  1781
     This compare does NOT ignore case differences,
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1782
     therefore 'foo' = 'Foo' will return false.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1783
     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
  1784
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1785
    |mySize    "{ Class: SmallInteger }"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1786
     otherSize |
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1787
5963
23462e06dcff compare with Texts fixed (should compare equal if strings are)
Claus Gittinger <cg@exept.de>
parents: 5946
diff changeset
  1788
    (aString isString or:[aString species == self species]) ifFalse:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1789
	^ false
5963
23462e06dcff compare with Texts fixed (should compare equal if strings are)
Claus Gittinger <cg@exept.de>
parents: 5946
diff changeset
  1790
    ].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1791
    mySize := self size.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1792
    otherSize := aString size.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1793
    mySize == otherSize ifFalse:[^ false].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1794
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1795
    1 to:mySize do:[:index |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1796
	(self at:index) = (aString at:index) ifFalse:[^ false].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1797
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1798
    ^ true
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1799
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1800
    "
8874
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' = 'bar'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1803
     'foo' = 'foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1804
     'foo' = 'foo' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1805
     'foo' asText = 'foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1806
     'foo' asText = 'foo' asText
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1807
    "
1252
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  1808
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  1809
    "Modified: 22.4.1996 / 15:53:58 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1810
!
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1811
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  1812
> aString
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1813
    "Compare the receiver with the argument and return true if the
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1814
     receiver is greater than the argument. Otherwise return false.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1815
     This comparison is based on the elements ascii code -
1252
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  1816
     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
  1817
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1818
    |mySize    "{ Class: SmallInteger }"
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1819
     otherSize "{ Class: SmallInteger }"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1820
     n         "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1821
     c1 c2|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1822
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1823
    mySize := self size.
5929
a3d2e7aaa3a3 added #compareCaselessWith:
Claus Gittinger <cg@exept.de>
parents: 5898
diff changeset
  1824
    otherSize := aString string size.
a3d2e7aaa3a3 added #compareCaselessWith:
Claus Gittinger <cg@exept.de>
parents: 5898
diff changeset
  1825
    n := mySize min:otherSize.
a3d2e7aaa3a3 added #compareCaselessWith:
Claus Gittinger <cg@exept.de>
parents: 5898
diff changeset
  1826
a3d2e7aaa3a3 added #compareCaselessWith:
Claus Gittinger <cg@exept.de>
parents: 5898
diff changeset
  1827
    1 to:n do:[:index |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1828
	c1 := self at:index.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1829
	c2 := aString at:index.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1830
	(c1 == c2 or:[c1 = c2]) ifFalse:[^ c1 > c2].
5929
a3d2e7aaa3a3 added #compareCaselessWith:
Claus Gittinger <cg@exept.de>
parents: 5898
diff changeset
  1831
    ].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1832
    ^ mySize > otherSize
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
    "Modified: 22.4.1996 / 15:55:00 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1835
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1836
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1837
compareCaselessWith:aString
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1838
    "Compare the receiver against the argument, ignoreing case.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1839
     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
  1840
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1841
     This comparison is based on the elements ascii code -
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1842
     i.e. national characters are NOT treated specially.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1843
     'foo' compareWith: 'Foo' will return 0"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1844
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1845
    |mySize    "{ Class: SmallInteger }"
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1846
     otherSize "{ Class: SmallInteger }"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1847
     n         "{ Class: SmallInteger }"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1848
     c1 c2|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1849
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1850
    mySize := self size.
5739
4fd3be7ccc75 oops some relational ops did accept a non-string arg
Claus Gittinger <cg@exept.de>
parents: 5732
diff changeset
  1851
    otherSize := aString string size.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1852
    n := mySize min:otherSize.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1853
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1854
    1 to:n do:[:index |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1855
	c1 := (self at:index) asLowercase.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1856
	c2 := (aString at:index) asLowercase.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1857
	c1 > c2 ifTrue:[^ 1].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1858
	c1 < c2 ifTrue:[^ -1].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1859
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1860
    mySize > otherSize ifTrue:[^ 1].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1861
    mySize < otherSize ifTrue:[^ -1].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1862
    ^ 0
1252
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  1863
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  1864
    "Modified: 22.4.1996 / 15:56:07 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1865
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1866
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1867
compareWith:aString
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1868
    "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
  1869
     greater, 0 if equal and -1 if less than the argument.
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1870
     This comparison is based on the elements' codepoints -
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1871
     i.e. upper/lowercase & national characters are NOT treated specially.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1872
     'foo' compareWith: 'Foo' will return 1.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1873
     while 'foo' sameAs:'Foo' will return true"
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1874
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1875
    |mySize    "{ Class: SmallInteger }"
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1876
     otherSize "{ Class: SmallInteger }"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1877
     n         "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1878
     c1 c2|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1879
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1880
    mySize := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1881
    otherSize := aString string size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1882
    n := mySize min:otherSize.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1883
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1884
    1 to:n do:[:index |
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1885
	c1 := self at:index.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1886
	c2 := aString at:index.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1887
	c1 > c2 ifTrue:[^ 1].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1888
	c1 < c2 ifTrue:[^ -1].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1889
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1890
    mySize > otherSize ifTrue:[^ 1].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1891
    mySize < otherSize ifTrue:[^ -1].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1892
    ^ 0
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
    "Modified: 22.4.1996 / 15:56:07 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1895
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1896
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1897
endsWith:aStringOrCharacter
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1898
    "return true, if the receiver ends with something, aStringOrCharacter."
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1899
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1900
    |s|
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1901
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1902
    (s := self string) ~~ self ifTrue:[
17763
019bb9c842c5 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17761
diff changeset
  1903
        ^ s endsWith:aStringOrCharacter
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1904
    ].
17763
019bb9c842c5 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17761
diff changeset
  1905
    (self notEmpty and:[aStringOrCharacter isCharacter]) ifTrue:[
019bb9c842c5 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17761
diff changeset
  1906
        ^ self last = aStringOrCharacter
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1907
    ].
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1908
    ^ super endsWith:aStringOrCharacter
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1909
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1910
    "
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1911
     'hello world' endsWith:'world'
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1912
     'hello world' asText allBold endsWith:'world'
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1913
    "
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1914
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1915
    "Modified: 12.5.1996 / 15:49:18 / cg"
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1916
!
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1917
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1918
hammingDistanceTo:aString
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1919
    "return the hamming distance (the number of characters which are different).
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1920
     In information theory, the Hamming distance between two strings of equal length
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1921
     is the number of positions for which the corresponding symbols are different.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1922
     Put another way, it measures the minimum number of substitutions required to change
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1923
     one into the other, or the number of errors that transformed one string into the other."
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1924
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1925
    self assert:(aString size == self size).
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1926
    ^ 1 to:self size count:[:idx | (self at:idx) ~= (aString at:idx)]
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1927
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1928
    "
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1929
     'roses' hammingDistanceTo:'toned'
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1930
    "
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1931
!
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1932
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1933
hash
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1934
    "return an integer useful as a hash-key"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1935
10698
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  1936
    |h g|
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  1937
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  1938
    "/
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  1939
    "/ this is the dragon-book algorithm
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  1940
    "/
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  1941
    h := 0.
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  1942
    self reverseDo:[:char |
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  1943
"/ 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
  1944
"/        h := (h bitShift:4) + char asciiValue.
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1945
	h := (h bitShift:4).
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1946
	h:= h + char codePoint.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1947
	h := h bitAnd:16rFFFFFFFF.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1948
	g := (h bitAnd: 16rF0000000).
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1949
	g ~~ 0 ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1950
	    h := h bitXor:(g bitShift:-24).
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1951
	    h := h bitXor:g.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1952
	].
10698
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  1953
    ].
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  1954
    "/
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  1955
    "/ multiply by large prime to spread values
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  1956
    "/ This speeds up Set and Dictionary by a factor of 10!!
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
    h := h * 31415821.
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  1959
    h := h bitAnd:16r3fffffff.
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  1960
    ^ h
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  1961
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  1962
    "
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  1963
     'a' hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  1964
     'a' asUnicode16String hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  1965
     'aa' hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  1966
     'aa' asUnicode16String hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  1967
     'ab' hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  1968
     'ab' asUnicode16String hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  1969
     'ab' hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  1970
     'ab' asArray hash
10698
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  1971
    "
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1972
!
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1973
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1974
levenshteinTo:aString
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1975
    "return the levenshtein distance to the argument, aString;
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1976
     this value corresponds to the number of replacements that have to be
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1977
     made to get aString from the receiver.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1978
     See IEEE transactions on Computers 1976 Pg 172 ff."
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1979
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1980
    "
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1981
     in the following, we assume that ommiting a character
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1982
     is less of an error than inserting an extra character.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1983
     Therefore the different insertion (i) and deletion (d) values.
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1984
	s: substitution weight
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1985
	k: keyboard weight (typing a nearby key) - or nil (then use s)
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1986
	c: case weight                           - or nil (then use s)
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1987
	e: exchange weight                       - or nil (then use s*2)
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1988
	i: insertion of extra character weight
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1989
	d: delete of a character weight
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1990
    "
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1991
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1992
    ^ StringUtilities
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1993
	    levenshteinDistanceFrom:self
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1994
	    to:aString
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1995
	    s:4 k:4 c:4 e:nil i:2 d:6
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1996
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1997
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  1998
     'computer' levenshteinTo:'computer'
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  1999
     'cOmputer' levenshteinTo:'computer'
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2000
     'cOmpuTer' levenshteinTo:'computer'
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2001
     'cimputer' levenshteinTo:'computer'
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2002
     'cumputer' levenshteinTo:'computer'
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2003
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2004
     'cmputer' levenshteinTo:'computer'
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2005
     'coomputer' levenshteinTo:'computer'
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2006
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2007
     'ocmprt' levenshteinTo:'computer'
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2008
     'computer' levenshteinTo:'computer'
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2009
     'ocmputer' levenshteinTo:'computer'
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2010
     'cmputer' levenshteinTo:'computer'
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2011
     'computer' levenshteinTo:'cmputer'
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2012
     'Computer' levenshteinTo:'computer'
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2013
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2014
     'compiter' levenshteinTo:'computer'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2015
     'compoter' levenshteinTo:'computer'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2016
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2017
     'comptuer' levenshteinTo:'computer'
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2018
    "
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2019
!
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2020
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2021
levenshteinTo:aString s:substWeight k:kbdTypoWeight c:caseWeight i:insrtWeight d:deleteWeight
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2022
    "parametrized levenshtein.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2023
     return the levenshtein distance to the argument, aString;
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2024
     this value corrensponds to the number of replacements that have to be
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2025
     made to get aString from the receiver.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2026
     The arguments are the costs for
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2027
	s:substitution,
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2028
	k:keyboard type (substitution),
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2029
	c:case-change,
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2030
	i:insertion
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2031
	d:deletion
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2032
     of a character.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2033
     See IEEE transactions on Computers 1976 Pg 172 ff"
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2034
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2035
    ^ StringUtilities
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2036
	    levenshteinDistanceFrom:self
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2037
	    to:aString
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2038
	    s:substWeight k:kbdTypoWeight c:caseWeight e:nil i:insrtWeight d:deleteWeight
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2039
!
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2040
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2041
sameAs:aString
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2042
    "Compare the receiver with the argument like =, but ignore case differences.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2043
     Return true or false."
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2044
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2045
    |mySize "{ Class: SmallInteger }"
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2046
     otherSize c1 c2|
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2047
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2048
    self == aString ifTrue:[^ true].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2049
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2050
    mySize := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2051
    otherSize := aString string size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2052
    mySize == otherSize ifFalse:[^ false].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2053
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2054
    1 to:mySize do:[:index |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2055
	c1 := self at:index.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2056
	c2 := aString at:index.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2057
	c1 == c2 ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2058
	    (c1 sameAs:c2) ifFalse:[^ false].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2059
	]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2060
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2061
    ^ true
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2062
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2063
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2064
     'foo' sameAs: 'Foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2065
     'foo' sameAs: 'bar'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2066
     'foo' sameAs: 'foo'
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2067
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2068
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2069
    "Modified: 22.4.1996 / 15:56:17 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2070
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2071
5242
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2072
sameAs:aString ignoreCase:ignoreCase
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2073
    "Compare the receiver with the argument.
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2074
     If ignoreCase is true, this is the same as #sameAs:,
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2075
     if false, this is the same as #=."
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2076
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2077
    ignoreCase ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2078
	^ self sameAs:aString
5242
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2079
    ].
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2080
    ^ self = aString
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2081
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2082
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2083
     'foo' sameAs:'Foo' ignoreCase:false
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2084
     'foo' sameAs:'foo' ignoreCase:true
5242
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2085
    "
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2086
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2087
!
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2088
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2089
sameCharacters:aString
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2090
    "count & return the number of characters which are the same
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2091
     (ignoring case and emphasis) in the receiver and the argument, aString."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2092
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2093
    |n "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2094
     c1 c2 cnt|
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
    n := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2097
    n := n min:(aString string size).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2098
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2099
    cnt := 0.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2100
    1 to:n 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)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2104
	or:[c1 asLowercase = c2 asLowercase]) ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2105
	    cnt := cnt + 1
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
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2108
    ^ cnt
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2109
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2110
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2111
     'foobarbaz' sameCharacters: 'foo'
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2112
     'foobarbaz' sameCharacters: 'Foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2113
     'foobarbaz' sameCharacters: 'baz'
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2114
    "
5510
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2115
!
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2116
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2117
sameEmphasisAs:aStringOrText
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2118
    "compare the receivers and the arguments emphasis"
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2119
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2120
    ^ self emphasis = aStringOrText emphasis
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2121
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2122
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2123
     'hello' asText sameEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2124
     'hello' asText sameEmphasisAs: 'hello' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2125
     'hello' asText allBold sameEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2126
     'hello' asText allBold sameEmphasisAs: 'fooba' asText allBold
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2127
     'hello' asText allBold sameEmphasisAs: 'fooba' asText allItalic
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2128
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2129
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2130
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2131
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2132
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  2133
sameStringAndEmphasisAs:aStringOrText
5739
4fd3be7ccc75 oops some relational ops did accept a non-string arg
Claus Gittinger <cg@exept.de>
parents: 5732
diff changeset
  2134
    "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
  2135
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2136
    aStringOrText isString ifFalse:[^ false].
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2137
    (self string = aStringOrText string) ifFalse:[^ false].
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2138
    self hasChangeOfEmphasis = aStringOrText hasChangeOfEmphasis ifFalse:[^ false].
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2139
    ^ self emphasis = aStringOrText emphasis
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2140
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2141
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2142
     'hello' asText sameEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2143
     'hello' asText sameEmphasisAs: 'hello' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2144
     'hello' asText allBold sameEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2145
     'hello' asText allBold sameEmphasisAs: 'fooba' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2146
     'hello' asText allBold sameEmphasisAs: 'fooba' asText allItalic
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2147
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2148
     'hello' sameEmphasisAs: 'hello' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2149
     'hello' sameEmphasisAs: 'hello' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2150
     'hello' sameEmphasisAs: 'fooba'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2151
     'hello' sameEmphasisAs: 'fooba' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2152
     'hello' sameEmphasisAs: 'fooba' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2153
     'hello' sameEmphasisAs: 'fooba' asText allItalic
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2154
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2155
     'hello' asText sameStringAndEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2156
     'hello' asText sameStringAndEmphasisAs: 'hello' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2157
     'hello' asText allBold sameStringAndEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2158
     'hello' asText allBold sameStringAndEmphasisAs: 'fooba' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2159
     'hello' asText allBold sameStringAndEmphasisAs: 'fooba' asText allItalic
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2160
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2161
     'hello' sameStringAndEmphasisAs: 'hello' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2162
     'hello' sameStringAndEmphasisAs: 'hello' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2163
     'hello' sameStringAndEmphasisAs: 'fooba'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2164
     'hello' sameStringAndEmphasisAs: 'fooba' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2165
     'hello' sameStringAndEmphasisAs: 'fooba' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2166
     'hello' sameStringAndEmphasisAs: 'fooba' asText allItalic
5510
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2167
    "
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2168
!
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2169
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2170
spellAgainst: aString
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2171
    "return an integer between 0 and 100 indicating how similar
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2172
     the argument is to the receiver.  No case conversion is done.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2173
     This algorithm is much simpler (but also less exact) than the
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2174
     levenshtein distance. Experiment which is better for your
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2175
     application."
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2176
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2177
    | i1     "{ Class: SmallInteger }"
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2178
      i2     "{ Class: SmallInteger }"
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2179
      next1  "{ Class: SmallInteger }"
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2180
      next2  "{ Class: SmallInteger }"
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2181
      size1  "{ Class: SmallInteger }"
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2182
      size2  "{ Class: SmallInteger }"
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2183
      score  "{ Class: SmallInteger }"
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2184
      maxLen "{ Class: SmallInteger }" |
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2185
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2186
    size1 := self size.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2187
    size2 := aString size.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2188
    maxLen := size1 max:size2.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2189
    score := 0.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2190
    i1 := i2 := 1.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2191
    [i1 <= size1 and: [i2 <= size2]] whileTrue:[
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2192
	next1 := i1 + 1.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2193
	next2 := i2 + 1.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2194
	(self at:i1) == (aString at:i2) ifTrue: [
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2195
	    score := score+1.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2196
	    i1 := next1.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2197
	    i2 := next2
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2198
	] ifFalse: [
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2199
	    (i2 < size2 and: [(self at:i1) == (aString at:next2)]) ifTrue: [
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2200
		i2 := next2
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2201
	    ] ifFalse: [
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2202
		(i1 < size1 and: [(self at:next1) == (aString at:i2)]) ifTrue: [
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2203
		    i1 := next1
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2204
		] ifFalse: [
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2205
		    i1 := next1.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2206
		    i2 := next2
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2207
		]
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2208
	    ]
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2209
	]
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2210
    ].
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2211
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2212
    score == maxLen ifTrue: [^ 100].
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2213
    ^ 100 * score // maxLen
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2214
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2215
    "
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2216
     'Smalltalk' spellAgainst: 'Smalltlak'
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2217
     'Smalltalk' spellAgainst: 'smalltlak'
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2218
     'Smalltalk' spellAgainst: 'smalltalk'
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2219
     'Smalltalk' spellAgainst: 'smalltlk'
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2220
     'Smalltalk' spellAgainst: 'Smalltolk'
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2221
    "
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2222
!
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2223
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2224
startsWith:aString
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2225
    "return true, if the receiver starts with something, aString.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2226
     If the argument is empty, true is returned."
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2227
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2228
    |s|
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2229
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2230
    (s := self string) ~~ self ifTrue:[
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2231
	^ s startsWith:aString
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2232
    ].
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2233
    ^ super startsWith:aString
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2234
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2235
    "
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2236
     'hello world' startsWith:'hello'
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2237
     'hello world' asText allBold startsWith:'hello'
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2238
     'hello world' asText allBold startsWith:''
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2239
    "
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2240
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2241
    "Created: 12.5.1996 / 15:46:40 / cg"
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2242
    "Modified: 12.5.1996 / 15:49:24 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2243
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2244
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2245
!CharacterArray methodsFor:'converting'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2246
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2247
asArrayOfSubstrings
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2248
    "return an array of substrings from the receiver, interpreting
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2249
     separators (i.e. spaces & newlines) as word-delimiters.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2250
     This is a compatibility method - the actual work is done in
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2251
     asCollectionOfWords."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2252
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2253
    ^ self asCollectionOfWords asArray
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2254
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2255
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2256
     '1 one two three four 5 five' asArrayOfSubstrings
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2257
     '1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2258
one
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2259
	two three four 5 five' asArrayOfSubstrings
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2260
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2261
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2262
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2263
asAsciiZ
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2264
    "if the receiver does not end with a 0-valued character, return a copy of it,
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2265
     with an additional 0-character. Otherwise return the receiver. This is sometimes
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2266
     needed when a string has to be passed to C, which needs 0-terminated strings.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2267
     Notice, that all singleByte strings are already 0-terminated in ST/X, whereas wide
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2268
     strings are not."
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2269
17747
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  2270
    (self notEmpty and:[self last codePoint == 0]) ifTrue:[^ self ].
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2271
    ^ self copyWith:(Character value:0).
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2272
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2273
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2274
     'abc' asAsciiZ
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2275
     'abc' asWideString asAsciiZ
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2276
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2277
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2278
17847
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  2279
asByteArray
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  2280
    |bytes sz bytesPerCharacter idx|
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  2281
17851
09d75924b034 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
  2282
    self string ~~ self ifTrue:[
09d75924b034 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
  2283
        "/ for text and other wrappers
09d75924b034 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
  2284
        ^ self string asByteArray
09d75924b034 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
  2285
    ].
09d75924b034 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
  2286
09d75924b034 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
  2287
    "/ for real strings, a fallback
17847
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  2288
    sz := self size.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  2289
    bytesPerCharacter := self bitsPerCharacter // 8.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  2290
    bytes := ByteArray new:(sz * bytesPerCharacter).
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  2291
    idx := 1.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  2292
    self do:[:char |
17851
09d75924b034 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
  2293
        |code|
09d75924b034 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
  2294
09d75924b034 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
  2295
        code := char codePoint.
17847
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  2296
        bytesPerCharacter == 2 ifTrue:[
17851
09d75924b034 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
  2297
            bytes unsignedShortAt:idx put:code
17847
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  2298
        ] ifFalse:[
17851
09d75924b034 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
  2299
            bytesPerCharacter == 4 ifTrue:[
09d75924b034 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
  2300
                bytes unsignedLongAt:idx put:code
17847
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  2301
            ] ifFalse:[
17851
09d75924b034 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
  2302
                bytes at:idx put:code
17847
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  2303
            ].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  2304
        ].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  2305
        idx := idx + bytesPerCharacter.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  2306
    ].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  2307
    ^ bytes
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  2308
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  2309
    "Created: / 27-07-2011 / 00:56:17 / cg"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  2310
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  2311
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2312
asCollectionOfLines
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2313
    "return a collection containing the lines (separated by cr)
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2314
     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
  2315
     contain empty strings."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2316
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2317
    ^ self asCollectionOfSubstringsSeparatedBy:Character cr
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2318
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2319
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2320
     '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
  2321
     '1 one\\\\2 two\3 three' withCRs asCollectionOfLines
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2322
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2323
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2324
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2325
asCollectionOfSubstringsSeparatedBy:aCharacter
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2326
    "return a collection containing the lines (separated by aCharacter)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2327
     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
  2328
     the result will contain empty strings."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2329
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2330
    ^ self asCollectionOfSubCollectionsSeparatedBy:aCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2331
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2332
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2333
     '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
  2334
     '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
  2335
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2336
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2337
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2338
asCollectionOfSubstringsSeparatedBy:aCharacter exceptIn:ch
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2339
    "return a collection containing the lines (separated by aCharacter)
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2340
     of the receiver. If aCharacter occurs multiple times in a row,
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2341
     the result will contain empty strings. The separation is not done,
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2342
     inside a matching pair of ch-substrings. Can be used to tokenize csv-like strings."
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2343
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2344
    |lines myClass except i c
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2345
     startIndex    "{ Class:SmallInteger }"
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2346
     stopIndex     "{ Class:SmallInteger }" |
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2347
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2348
    lines := StringCollection new.
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2349
    myClass := self species.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2350
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2351
    startIndex := 1.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2352
    except := false.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2353
    [
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2354
	i := startIndex-1.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2355
	[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2356
	    i := i+1.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2357
	    c := self at:i.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2358
	    c = ch ifTrue:[ except := except not. ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2359
	    i < self size and:[except or:[c ~= aCharacter]]
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2360
	] whileTrue.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2361
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2362
	c = aCharacter ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2363
	    stopIndex := i -1.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2364
	] ifFalse: [
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2365
	    stopIndex := i.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2366
	].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2367
	(stopIndex < startIndex) ifTrue: [
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2368
	    lines add:(myClass new:0)
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2369
	] ifFalse: [
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2370
	    lines add:(self copyFrom:startIndex to:stopIndex)
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2371
	].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2372
	startIndex := stopIndex + 2.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2373
	startIndex <= self size
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2374
    ] whileTrue.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2375
    ^ lines
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2376
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2377
    "
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2378
     'asd''f;d''dd;s' asCollectionOfSubstringsSeparatedBy:$; exceptIn:$'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2379
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2380
    "/ 'asd "hello bla" foo "bla bla" bar' asCollectionOfSubstringsSeparatedBy:$  exceptIn:$"
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2381
!
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2382
17841
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2383
asCollectionOfSubstringsSeparatedBy:aFieldSeparatorString textSeparator:aTextSeparatorOrNil
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2384
    "return a collection containing the words (separated by aFieldSeparatorString) of the receiver.
17834
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2385
     Individual words might be enclosed in aTextSeparator characters, in case they contain blanks or fieldSeparators.
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2386
     Typically used for CSV line parsing, with a $; as aFieldSeparator and $'' (dquote) as textSeparator."
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2387
17841
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2388
    |aTextSeparatorChar items scanningWord inStream element lastIsFieldSeparator sz|
17834
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2389
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2390
    aTextSeparatorOrNil isNil ifTrue:[
17841
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2391
        ^ self asCollectionOfSubstringsSeparatedByAll: aFieldSeparatorString
17834
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2392
    ].
17841
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2393
    sz := aTextSeparatorOrNil size.
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2394
    sz = 0 ifTrue:[
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2395
        aTextSeparatorChar := aTextSeparatorOrNil
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2396
    ] ifFalse:[sz = 1  ifTrue:[
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2397
        "this is a String. Fetch the first character - compatibility to older expecco libs"
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2398
        aTextSeparatorChar := aTextSeparatorOrNil first.
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2399
    ] ifFalse:[
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2400
        self error:'textSeparatoSize > 1'.
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2401
    ]].
17834
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2402
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2403
    items := OrderedCollection new.
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2404
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2405
    inStream := ReadStream on:self.
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2406
    [   
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2407
        inStream skipSeparators.
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2408
        inStream atEnd
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2409
    ] whileFalse:[
17841
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2410
        lastIsFieldSeparator := false.
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2411
        inStream peek == aTextSeparatorChar ifTrue:[
17834
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2412
            inStream next.
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2413
            element := ''.
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2414
            scanningWord := true.
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2415
            [ inStream atEnd not and:[scanningWord] ] whileTrue:[
17841
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2416
                element := element , (inStream upTo:aTextSeparatorChar).
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2417
                (inStream peek == aTextSeparatorChar) ifTrue:[
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2418
                    element := element , aTextSeparatorChar .    
17834
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2419
                    inStream next.
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2420
                ] ifFalse:[
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2421
                    scanningWord := false.
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2422
                ].
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2423
            ].
17841
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2424
            inStream upToAll:aFieldSeparatorString.
17834
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2425
        ] ifFalse:[
17841
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2426
            element := inStream upToAll:aFieldSeparatorString
17834
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2427
        ].
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2428
        items add:element.
17841
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2429
        lastIsFieldSeparator := (inStream skipThroughAll:aFieldSeparatorString) notNil.
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2430
    ].
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2431
    lastIsFieldSeparator ifTrue:[
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2432
        "empty element at the end of the line"
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2433
        items add:''.
17834
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2434
    ].
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2435
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2436
    ^ items
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2437
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2438
    "
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2439
     self assert:(('#First#, #Second,SecondAdd#, #Third#' asCollectionOfSubstringsSeparatedBy:',' textSeparator: $#)
17841
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2440
                  sameContentsAs:#('First' 'Second,SecondAdd' 'Third')).
17834
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2441
     self assert:(('#Fir##st#, #Second,SecondAdd#, #Third#' asCollectionOfSubstringsSeparatedBy:',' textSeparator: $#)
17841
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2442
                  sameContentsAs:#('Fir#st' 'Second,SecondAdd' 'Third')).
17834
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2443
     self assert:(('#Fir##st#, Second,SecondAdd, #Third#' asCollectionOfSubstringsSeparatedBy:',' textSeparator: $#)
17841
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2444
                  sameContentsAs:#('Fir#st' 'Second' 'SecondAdd' 'Third')).
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2445
     self assert:(('First,Second,Third,,' asCollectionOfSubstringsSeparatedBy:',' textSeparator:nil)
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2446
                   sameContentsAs:#('First' 'Second' 'Third' '' '')).
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2447
     self assert:(('First,Second,Third,,' asCollectionOfSubstringsSeparatedBy:',' textSeparator:'#')
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  2448
                   sameContentsAs:#('First' 'Second' 'Third' '' '')).
17834
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2449
    "
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2450
04ff72c5039a Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17815
diff changeset
  2451
    "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
  2452
!
999589445aa7 add new method for splitting a csv string into csv elements
ab
parents: 10437
diff changeset
  2453
7339
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2454
asCollectionOfSubstringsSeparatedByAll:aSeparatorString
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2455
    "return a collection containing the lines (separated by aSeparatorString)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2456
     of the receiver. If aSeparatorString occurs multiple times in a row,
7339
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2457
     the result will contain empty strings."
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2458
8852
9f5984eff2c2 use asCollectionOfSubCollectionsSeparatedBy*
Claus Gittinger <cg@exept.de>
parents: 8794
diff changeset
  2459
    ^ self asCollectionOfSubCollectionsSeparatedByAll:aSeparatorString
9f5984eff2c2 use asCollectionOfSubCollectionsSeparatedBy*
Claus Gittinger <cg@exept.de>
parents: 8794
diff changeset
  2460
9f5984eff2c2 use asCollectionOfSubCollectionsSeparatedBy*
Claus Gittinger <cg@exept.de>
parents: 8794
diff changeset
  2461
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2462
     '1::2::3::4::5::' asCollectionOfSubstringsSeparatedByAll:'::'
7339
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2463
    "
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2464
!
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2465
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2466
asCollectionOfSubstringsSeparatedByAny:aCollectionOfSeparators
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2467
    "return a collection containing the words (separated by any character
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2468
     from aCollectionOfSeparators) of the receiver.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2469
     This allows breaking up strings using any character as separator."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2470
8852
9f5984eff2c2 use asCollectionOfSubCollectionsSeparatedBy*
Claus Gittinger <cg@exept.de>
parents: 8794
diff changeset
  2471
    ^ self asCollectionOfSubCollectionsSeparatedByAny:aCollectionOfSeparators
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2472
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2473
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2474
     'hello:world:isnt:this nice' asCollectionOfSubstringsSeparatedByAny:#($:)
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2475
     'hello:world:isnt:this nice' asCollectionOfSubstringsSeparatedByAny:':'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2476
     'hello:world:isnt:this nice' asCollectionOfSubstringsSeparatedByAny:(Array with:$: with:Character space)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2477
     'hello:world:isnt:this nice' asCollectionOfSubstringsSeparatedByAny:': '
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2478
     'h1e2l3l4o' asCollectionOfSubstringsSeparatedByAny:($1 to: $9)
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2479
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2480
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2481
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2482
asCollectionOfWords
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2483
    "return a collection containing the words (separated by whitespace)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2484
     of the receiver. Multiple occurrences of whitespace characters will
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2485
     be treated like one - i.e. whitespace is skipped."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2486
7797
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2487
    |words|
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2488
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2489
    words := StringCollection new.
7797
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2490
    self asCollectionOfWordsDo:[:w | words add:w].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2491
    ^ words
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2492
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2493
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2494
     'hello world isnt this nice' asCollectionOfWords
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2495
     '    hello    world   isnt   this   nice  ' asCollectionOfWords
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2496
     'hello' asCollectionOfWords
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2497
     '' asCollectionOfWords
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2498
     '      ' asCollectionOfWords
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2499
     ' foo bar__baz__bla__ bar ' asCollectionOfWords
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2500
     ' foo __bar__baz__bla__ bar ' asCollectionOfWords
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2501
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2502
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2503
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2504
asCollectionOfWordsDo:aBlock
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2505
    "evaluate aBlock for each word (separated by whitespace) of the receiver.
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2506
     Multiple occurrences of whitespace characters will be treated like one
7797
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2507
     - i.e. whitespace is skipped.
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2508
     Returns the number of words (i.e. the number of invocations of aBlock)."
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2509
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2510
    |count  "{ Class:SmallInteger }"
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2511
     start  "{ Class:SmallInteger }"
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2512
     stop   "{ Class:SmallInteger }"
7797
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2513
     mySize "{ Class:SmallInteger }"|
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2514
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2515
    count := 0.
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2516
    start := 1.
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2517
    mySize := self size.
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2518
    [start <= mySize] whileTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2519
	start := self indexOfNonSeparatorStartingAt:start.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2520
	start == 0 ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2521
	    ^ count
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2522
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2523
	stop := self indexOfSeparatorStartingAt:start.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2524
	stop == 0 ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2525
	    aBlock value:(self copyFrom:start to:mySize).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2526
	    ^ count + 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2527
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2528
	aBlock value:(self copyFrom:start to:(stop - 1)).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2529
	start := stop.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2530
	count := count + 1
7797
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2531
    ].
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2532
    ^ count
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2533
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2534
    "
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2535
     'hello world isnt this nice' asCollectionOfWordsDo:[:w | Transcript showCR:w]
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2536
     '    hello    world   isnt   this   nice  ' asCollectionOfWordsDo:[:w | Transcript showCR:w]
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2537
     'hello' asCollectionOfWordsDo:[:w | Transcript showCR:w]
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2538
     '' asCollectionOfWordsDo:[:w | Transcript showCR:w]
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2539
     '      ' asCollectionOfWordsDo:[:w | Transcript showCR:w]
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2540
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2541
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2542
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2543
asComposedText
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2544
    "ST-80 compatibility
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2545
     - ST/X does not (as today) support composedTexts."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2546
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2547
    ^ ComposedText fromString:self string
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
    "Modified: 27.4.1996 / 13:30:30 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2550
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2551
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2552
asFilename
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2553
    "return a Filename with pathname taken from the receiver"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2554
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2555
    ^ Filename named:self "(self asSingleByteStringReplaceInvalidWith:$?)"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2556
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2557
    "Modified: 20.5.1996 / 09:38:15 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2558
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2559
3060
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2560
asFixedPoint
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2561
    "read a fixedPoint number from the receiver.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2562
     Notice, that errors may occur during the read,
7423
5b25b8e82453 comments
Claus Gittinger <cg@exept.de>
parents: 7422
diff changeset
  2563
     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
  2564
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2565
    ^ FixedPoint readFromString:self
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2566
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2567
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2568
     '0.123' asFixedPoint
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2569
     '12345' asFixedPoint
3060
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2570
     '(1/5)' asFixedPoint
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2571
     'foo' asFixedPoint
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2572
     Object errorSignal handle:[:ex | ex return:0] do:['foo' asFixedPoint]
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
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2575
    "Modified: / 25.10.1997 / 15:19:00 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2576
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2577
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2578
asFixedPoint:scale
3060
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2579
    "read a fixedPoint number with scale number of post-decimal digits
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2580
     from the receiver. Scale controls the number of displayed digits,
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2581
     not the number of actually valid digits.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2582
     Notice, that errors may occur during the read,
7423
5b25b8e82453 comments
Claus Gittinger <cg@exept.de>
parents: 7422
diff changeset
  2583
     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
  2584
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2585
    ^ (FixedPoint readFromString:self) scale:scale
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2586
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2587
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2588
     '0.123' asFixedPoint:2
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2589
     '123456' asFixedPoint:2
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2590
     ('3.14157' asFixedPoint:1) asFixedPoint:5
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2591
     '3.14157' asFixedPoint:2
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2592
     'foo' asFixedPoint:2
3060
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2593
    "
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2594
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2595
    "Modified: / 25.10.1997 / 15:21:57 / cg"
9192
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
asFloat
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2599
    "read a float number from the receiver.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2600
     Notice, that errors may occur during the read,
7422
200486204923 comments
Claus Gittinger <cg@exept.de>
parents: 7421
diff changeset
  2601
     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
  2602
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2603
    ^ (Number readFromString:self) asFloat
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2604
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2605
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2606
     '0.123' asFloat
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2607
     '12345' asFloat
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2608
     '(1/5)' asFloat
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2609
     Object errorSignal handle:[:ex | ex return:0] do:['foo' asFloat]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2610
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2611
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2612
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2613
asInteger
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2614
    "convert the receiver into an integer.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2615
     Notice, that errors may occur during the read,
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2616
     so you better setup some exception handler when using this method.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2617
     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
  2618
     in other smalltalks.
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2619
     For less strict integer reading, use Integer readFrom:aString"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2620
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2621
    ^ Integer readFromString:self
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2622
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2623
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2624
     '12345678901234567890' asInteger
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2625
     '-1234' asInteger
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2626
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2627
     The following raises an error:
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2628
	 '0.123' asInteger              <- reader finds more after reading 0
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2629
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2630
     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
  2631
	 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
  2632
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2633
     '0.123' asInteger
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2634
     '0.123' asNumber    <- returns what you expect
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2635
     Object errorSignal handle:[:ex | ex return:0] do:['foo' asInteger]
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2636
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2637
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2638
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2639
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2640
asLowercase
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2641
    "return a copy of myself in lowercase letters"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2642
8003
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  2643
    |newStr c bitsPerCharacter
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2644
     mySize "{ Class: SmallInteger }" |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2645
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2646
    mySize := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2647
    mySize == 0 ifTrue:[^ self].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2648
    newStr := self species new:mySize.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2649
    bitsPerCharacter := newStr bitsPerCharacter.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2650
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2651
    1 to:mySize do:[:i |
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2652
	c := (self at:i) asLowercase.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2653
	c bitsPerCharacter > bitsPerCharacter ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2654
	    newStr := c stringSpecies fromString:newStr.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2655
	].
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2656
	newStr at:i put:c
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2657
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2658
    ^ newStr
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2659
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2660
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2661
     'HelloWorld' asLowercase
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2662
     'HelloWorld' asLowercaseFirst
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2663
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2664
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2665
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2666
asLowercaseFirst
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2667
    "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
  2668
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2669
    |newString firstChar firstCharAsLowercase|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2670
11525
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
  2671
    self isEmpty ifTrue:[^ self].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2672
    firstChar := (self at:1).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2673
    firstCharAsLowercase := firstChar asLowercase.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2674
    firstChar == firstCharAsLowercase ifTrue:[ ^ self].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2675
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2676
    firstCharAsLowercase bitsPerCharacter > self bitsPerCharacter ifTrue:[
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2677
	newString := firstCharAsLowercase stringSpecies fromString:self.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2678
    ] ifFalse:[
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2679
	newString := self stringSpecies fromString:self.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2680
    ].
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2681
    newString at:1 put:firstCharAsLowercase.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2682
    ^ newString
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2683
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2684
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2685
     'HelloWorld' asLowercase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2686
     'HelloWorld' asLowercaseFirst
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2687
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2688
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2689
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2690
asLowercaseLast
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2691
    "return a copy of myself where the last character is
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2692
     converted to lowercase."
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2693
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2694
    |newString sz|
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2695
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2696
    sz := self size.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2697
    newString := self copyFrom:1 to:sz.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2698
    sz > 0 ifTrue:[
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2699
	newString at:sz put:(newString at:sz) asLowercase
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2700
    ].
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2701
    ^ newString
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2702
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2703
    "
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2704
     'HelloWorld' asLowercase
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2705
     'HelloWorlD' asLowercaseLast
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2706
    "
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2707
!
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  2708
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2709
asNumber
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2710
    "read a number from the receiver.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2711
     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
  2712
     so you better setup some signal handler when using this method.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2713
     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
  2714
     it does not handle smalltalk numbers (i.e. radix).
c6396149df08 comment
Claus Gittinger <cg@exept.de>
parents: 9087
diff changeset
  2715
     To read a smalltalk number, use Number >> readSmalltalkFrom:.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2716
     This may change if ANSI specifies it."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2717
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2718
"/ ST-80 behavior:
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2719
"/  ^ Number readFromString:self onError:0
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2720
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2721
    ^ Number readFromString:self
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2722
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2723
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2724
     '123'     asNumber
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2725
     '123.567' asNumber
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2726
     '(5/6)'   asNumber
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2727
     'foo'     asNumber
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2728
     Object errorSignal handle:[:ex | ex returnWith:0] do:['foo' asNumber]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2729
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2730
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2731
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2732
asNumberFromFormatString:ignored
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2733
    "read a number from the receiver, ignoring any nonDigit characters.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2734
     This is typically used to convert from strings which include
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2735
     dollar-signs or millenium digits. However, this method also ignores
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2736
     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
  2737
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2738
    |tempString|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2739
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2740
    tempString := self collect:[:char | char isDigit].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2741
    ^ Number readFromString:tempString onError:0
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2742
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2743
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2744
     'USD 123' asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2745
     'DM 123'  asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2746
     '123'     asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2747
     '123.567' asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2748
     '(5/6)'   asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2749
     'foo'     asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2750
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2751
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2752
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2753
asOneByteString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2754
    "return the receiver converted to a 'normal' string.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2755
     Same as asSingleByteString - for compatibility."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2756
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2757
    ^ self asSingleByteString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2758
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2759
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2760
asSingleByteString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2761
    "return the receiver converted to a 'normal' string.
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2762
     Raises an error if unrepresentable characters are encountered.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2763
     See also: asSingleByteStringIfPossible and asSingleByteStringReplaceInvalidWith:"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2764
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2765
    ^ String fromString:self
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2766
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2767
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2768
     (Unicode16String with:(Character value:16rFF)) asSingleByteString
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2769
     (Unicode16String with:(Character value:16rFFFF)) asSingleByteString
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  2770
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2771
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2772
7977
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  2773
asSingleByteStringIfPossible
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  2774
    "if possible, return the receiver converted to a 'normal' string.
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  2775
     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
  2776
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  2777
    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
  2778
    (self contains:[:char | char codePoint > 255]) ifFalse:[^ self asSingleByteString].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2779
    ^ self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2780
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2781
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2782
     'hello' asSingleByteStringIfPossible
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2783
     'hello' asUnicodeString asSingleByteStringIfPossible
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2784
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2785
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2786
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2787
asSingleByteStringReplaceInvalidWith:replacementCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2788
    "return the receiver converted to a 'normal' string,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2789
     with invalid characters replaced by replacementCharacter.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2790
     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
  2791
     and replace characters above code-255 with some replacement."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2792
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2793
    |newString|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2794
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2795
    newString := String new:(self size).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2796
    1 to:self size do:[:idx |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2797
	|char|
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
	char := self at:idx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2800
	char codePoint <= 16rFF ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2801
	    newString at:idx put:char
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2802
	] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2803
	    newString at:idx put:replacementCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2804
	].
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2805
    ].
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2806
    ^ newString
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2807
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2808
    "Created: 30.6.1997 / 13:02:14 / cg"
7977
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  2809
!
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  2810
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2811
asString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2812
    "return myself - I am a string"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2813
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2814
    ^ self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2815
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2816
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2817
asStringCollection
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2818
    "return a collection of lines from myself."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2819
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2820
    ^ StringCollection fromString:self "string"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2821
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2822
    "Modified: 13.5.1996 / 20:36:59 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2823
!
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  2824
1434
a317ba02d685 allow aText asSymbol
Claus Gittinger <cg@exept.de>
parents: 1429
diff changeset
  2825
asSymbol
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  2826
    "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
  2827
     The receiver must be a singleByte-String.
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  2828
     TwoByte- and FourByteSymbols are (currently ?) not allowed."
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  2829
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  2830
    |str|
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  2831
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2832
    str := self string.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2833
    str ~~ self ifTrue:[ ^ str asSymbol ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2834
    ^ self asSingleByteString asSymbol
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2835
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2836
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2837
asSymbolIfInterned
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2838
    "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
  2839
     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
  2840
	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
  2841
     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
  2842
     The receiver must be a singleByte-String.
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  2843
     TwoByte- and FourByteSymbols are (currently ?) not allowed."
1435
3ee1fde2aa58 allow asSymbolIfInterned for Texts
Claus Gittinger <cg@exept.de>
parents: 1434
diff changeset
  2844
6642
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  2845
    |s|
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  2846
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  2847
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  2848
    s := self string.
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  2849
    s ~~ self ifTrue:[
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  2850
       ^ s asSymbolIfInterned
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  2851
    ].
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  2852
    ^ nil.
1435
3ee1fde2aa58 allow asSymbolIfInterned for Texts
Claus Gittinger <cg@exept.de>
parents: 1434
diff changeset
  2853
3ee1fde2aa58 allow asSymbolIfInterned for Texts
Claus Gittinger <cg@exept.de>
parents: 1434
diff changeset
  2854
    "Created: 22.5.1996 / 16:37:04 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2855
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2856
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2857
asText
9403
ba6ca2bcfe10 documentation
Stefan Vogel <sv@exept.de>
parents: 9391
diff changeset
  2858
    "return a Text-object (string with emphasis) from myself."
9192
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
    "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
  2861
    Text isNil ifTrue:[^ self].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2862
    ^ Text fromString:self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2863
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2864
    "Created: 12.5.1996 / 10:41:14 / cg"
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
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2867
asTitlecase
8027
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2868
    "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
  2869
     and everything else to lowercase.
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2870
     See the comment in Character on what titlecase is."
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2871
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2872
    |newStr c bitsPerCharacter
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2873
     mySize "{ Class: SmallInteger }" |
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2874
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2875
    mySize := self size.
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2876
    newStr := self species new:mySize.
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2877
    bitsPerCharacter := newStr bitsPerCharacter.
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2878
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2879
    1 to:mySize do:[:i |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2880
	i == 1 ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2881
	    c := (self at:i) asTitlecase.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2882
	] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2883
	    c := (self at:i) asLowercase.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2884
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2885
	c bitsPerCharacter > bitsPerCharacter ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2886
	    newStr := c stringSpecies fromString:newStr.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2887
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2888
	newStr at:i put:c
8027
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2889
    ].
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2890
    ^ newStr
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2891
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2892
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2893
     'helloWorld' asTitlecase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2894
     'HelloWorld' asTitlecase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2895
     'HELLOWORLD' asTitlecase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2896
     'helloworld' asTitlecase
8027
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  2897
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2898
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2899
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2900
asTitlecaseFirst
8023
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  2901
    "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
  2902
     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
  2903
     (2-character glyphs), which consist of an upper- and lower-case characters.
93db40068fba comment
Claus Gittinger <cg@exept.de>
parents: 8023
diff changeset
  2904
     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
  2905
     receiver."
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  2906
8026
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  2907
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2908
     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
  2909
     (Let us write this compound character using ASCII as 'dz'.)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2910
     This character uppercases to character U+01F1, LATIN CAPITAL LETTER DZ.
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2911
     (Which is basically 'DZ'.)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2912
     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
  2913
     (Which we can write 'Dz'.)
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  2914
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  2915
      character uppercase titlecase
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  2916
      --------- --------- ---------
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  2917
      dz        DZ        Dz
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  2918
    "
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  2919
8023
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  2920
    |newString firstChar firstCharAsTitlecase|
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  2921
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  2922
    firstChar := (self at:1).
8025
04d9b6ef3012 comments
Claus Gittinger <cg@exept.de>
parents: 8024
diff changeset
  2923
    firstCharAsTitlecase := firstChar asTitlecase.
8023
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  2924
    firstChar == firstCharAsTitlecase ifTrue:[ ^ self].
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  2925
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  2926
    firstCharAsTitlecase bitsPerCharacter > self bitsPerCharacter ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2927
	newString := firstCharAsTitlecase stringSpecies fromString:self.
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  2928
    ] ifFalse:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2929
	newString := self stringSpecies fromString:self.
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  2930
    ].
8023
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  2931
    newString at:1 put:firstCharAsTitlecase.
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  2932
    ^ newString
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  2933
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  2934
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2935
     'helloWorld' asTitlecaseFirst
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2936
     'HelloWorld' asTitlecaseFirst
8023
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  2937
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2938
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2939
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2940
asTwoByteString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2941
    "return the receiver converted to a two-byte string.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2942
     Will be obsolete soon."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2943
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2944
    ^ TwoByteString fromString:self
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
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2947
asURI
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2948
    "return an URI with string taken from the receiver"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2949
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2950
    ^ URI fromString:self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2951
!
8710
Stefan Vogel <sv@exept.de>
parents: 8646
diff changeset
  2952
5776
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  2953
asURL
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  2954
    "return an URL-object from myself."
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  2955
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  2956
    ^ URL fromString:self
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  2957
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  2958
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2959
     'http://www.exept.de:80/index.html' asURL host
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2960
     'http://www.exept.de:80/index.html' asURL port
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2961
     'http://www.exept.de:80/index.html' asURL method
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2962
     'http://www.exept.de:80/index.html' asURL path
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2963
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2964
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2965
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2966
asUnicode16String
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2967
    "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
  2968
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2969
    ^ ((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
  2970
!
8295
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  2971
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  2972
asUnicode32String
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  2973
    "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
  2974
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  2975
    ^ ((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
  2976
!
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  2977
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  2978
asUnicodeString
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  2979
    "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
  2980
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  2981
    ^ ((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
  2982
!
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  2983
17807
06cc6c49e291 merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17800
diff changeset
  2984
asUnixFilename
06cc6c49e291 merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17800
diff changeset
  2985
    "return a UnixFilename with pathname taken from the receiver"
06cc6c49e291 merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17800
diff changeset
  2986
06cc6c49e291 merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17800
diff changeset
  2987
    ^ UnixFilename named:self
06cc6c49e291 merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17800
diff changeset
  2988
06cc6c49e291 merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17800
diff changeset
  2989
    "Created: / 20-09-2010 / 21:42:55 / cg"
06cc6c49e291 merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17800
diff changeset
  2990
!
06cc6c49e291 merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17800
diff changeset
  2991
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2992
asUppercase
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2993
    "return a copy of myself in uppercase letters"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2994
8003
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  2995
    |newStr c bitsPerCharacter
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2996
     mySize "{ Class: SmallInteger }" |
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2997
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2998
    mySize := self size.
8954
12e701d7b5ac allow for receiver to be empty in asLowercase and asUppercase.
Claus Gittinger <cg@exept.de>
parents: 8938
diff changeset
  2999
    mySize == 0 ifTrue:[^ self].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3000
    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
  3001
    bitsPerCharacter := newStr bitsPerCharacter.
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3002
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3003
    1 to:mySize do:[:i |
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3004
	c := (self at:i) asUppercase.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3005
	c bitsPerCharacter > bitsPerCharacter ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3006
	    newStr := c stringSpecies fromString:newStr.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3007
	].
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3008
	newStr at:i put:c
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3009
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3010
    ^ newStr
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3011
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3012
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3013
     'helloWorld' asUppercase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3014
     'helloWorld' asUppercaseFirst
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3015
     (Character value:16rB5) asString asUppercase   -- needs 16 bits !!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3016
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3017
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3018
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3019
asUppercaseFirst
8003
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3020
    "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
  3021
     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
  3022
     receiver."
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3023
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3024
    |newString firstChar firstCharAsUppercase|
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3025
17751
b2273fa8d59f Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17747
diff changeset
  3026
    self isEmpty ifTrue:[^ self].
b2273fa8d59f Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17747
diff changeset
  3027
    firstChar := self at:1.  
8003
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3028
    firstCharAsUppercase := firstChar asUppercase.
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3029
    firstChar == firstCharAsUppercase ifTrue:[ ^ self].
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3030
17751
b2273fa8d59f Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17747
diff changeset
  3031
    "/ 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
  3032
    firstCharAsUppercase bitsPerCharacter > self bitsPerCharacter ifTrue:[
17734
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3033
        newString := firstCharAsUppercase stringSpecies fromString:self.
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  3034
    ] ifFalse:[
17734
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3035
        newString := self stringSpecies fromString:self.
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  3036
    ].
8003
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3037
    newString at:1 put:firstCharAsUppercase.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3038
    ^ newString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3039
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3040
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3041
     'helloWorld' asUppercase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3042
     'helloWorld' asUppercaseFirst
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3043
     'HelloWorld' asUppercaseFirst
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3044
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3045
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3046
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3047
asUppercaseLast
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3048
    "return a copy of myself where the last character is
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3049
     converted to uppercase."
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3050
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3051
    |newString sz|
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3052
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3053
    sz := self size.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3054
    newString := self copyFrom:1 to:sz.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3055
    sz > 0 ifTrue:[
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3056
	newString at:sz put:(newString at:sz) asUppercase
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3057
    ].
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3058
    ^ newString
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3059
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3060
    "
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3061
     'HelloWorld' asUppercase
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3062
     'HelloWorld' asUppercaseLast
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3063
    "
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3064
!
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3065
11062
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3066
literalArrayEncoding
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3067
    "encode myself as an array literal, from which a copy of the receiver
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3068
     can be reconstructed with #decodeAsLiteralArray."
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3069
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3070
    ^ self
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3071
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3072
    "Modified: 1.9.1995 / 02:25:45 / claus"
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3073
    "Modified: 22.4.1996 / 13:00:50 / cg"
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3074
!
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3075
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3076
string
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3077
    "return the receiver - for ST-80 compatibility"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3078
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3079
    ^ self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3080
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3081
    "Modified: 27.4.1996 / 13:29:30 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3082
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3083
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3084
tokensBasedOn:aCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3085
    "this is an ST-80 alias for the ST/X method
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3086
	asCollectionOfSubstringsSeparatedBy:"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3087
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3088
    ^ self asCollectionOfSubstringsSeparatedBy:aCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3089
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3090
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3091
     'hello:world:isnt:this nice' tokensBasedOn:$:
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3092
     'foo,bar,baz' tokensBasedOn:$,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3093
     '/etc/passwd' asFilename readStream nextLine tokensBasedOn:$:
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3094
    "
11320
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  3095
!
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  3096
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3097
withoutAllSpaces
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3098
    ^ self asCollectionOfWords asStringWith:''.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3099
"/    |col string|
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3100
"/
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3101
"/    col := self asCollectionOfWords.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3102
"/    string := String new.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3103
"/    col do:[:el |
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3104
"/       string := string,el
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3105
"/    ].
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3106
"/    ^string
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3107
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3108
    "
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3109
     'hello wwww'  withoutAllSpaces
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3110
     'hel   lo www   w'  withoutAllSpaces
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3111
    "
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3112
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3113
    "Modified: / 18.7.1998 / 22:53:08 / cg"
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3114
!
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3115
11320
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  3116
writeStream
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3117
    "return a stream for writing onto the receiver.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3118
     Redefined to return a CharacterWriteStream which automatically checks for the bytesPerCharacter
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3119
     and replaces the stream-buffer as required."
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3120
11320
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  3121
    ^ CharacterWriteStream on:self
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3122
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3123
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3124
!CharacterArray methodsFor:'copying'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3125
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3126
, aStringOrCharacter
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3127
    "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
  3128
     This is nonStandard, but convenient"
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3129
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3130
    |myWidth otherWidth|
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3131
1050
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3132
    aStringOrCharacter isCharacter ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3133
	^ self copyWith:aStringOrCharacter
1050
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3134
    ].
1396
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3135
    aStringOrCharacter isText ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3136
	^ aStringOrCharacter concatenateFromString:self
1396
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3137
    ].
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3138
    aStringOrCharacter isString ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3139
	(otherWidth := aStringOrCharacter bitsPerCharacter) ~~ (myWidth := self bitsPerCharacter) ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3140
	    otherWidth > myWidth ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3141
		^ (aStringOrCharacter species fromString:self) , aStringOrCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3142
	    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3143
	    ^ self , (self species fromString:aStringOrCharacter)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3144
	].
2720
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
    ^ super , aStringOrCharacter
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3147
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3148
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3149
     'hello' , $1
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3150
     'hello' , '1'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3151
     'hello' , (' world' asText allBold)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3152
     'hello' , (JISEncodedString fromString:' world')
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3153
     (JISEncodedString fromString:'hello') , ' world'
1411
a3b3ab3044c6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1396
diff changeset
  3154
1422
9a0b792f2953 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1411
diff changeset
  3155
     Transcript showCR:
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3156
	 (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
  3157
    "
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3158
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3159
    "Modified: 28.6.1997 / 00:13:17 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3160
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3161
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3162
,, aString
7020
f51001115a54 comment
penk
parents: 6998
diff changeset
  3163
    "concatenate with a newLine in between"
6965
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3164
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3165
    ^ (self copyWith:Character cr) , aString
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3166
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3167
   "
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3168
     hello ,, world
7020
f51001115a54 comment
penk
parents: 6998
diff changeset
  3169
     'hello' ,, 'world'
6965
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3170
   "
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3171
!
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3172
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3173
chopTo:maxLen
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3174
    "if the receivers size is less or equal to maxLen, return it.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3175
     Otherwise, return a copy of the receiver, where some characters
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3176
     in the middle have been removed for a total string length
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3177
     of maxLen."
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3178
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3179
    |sz n1 n2|
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3180
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3181
    (sz := self size) <= maxLen ifTrue:[ ^ self ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3182
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3183
    n1 := n2 := maxLen // 2.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3184
    maxLen odd ifTrue:[
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3185
	n2 := n1 + 1
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3186
    ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3187
    ^ (self copyFrom:1 to:n1) , (self copyFrom:sz - n2 + 1)
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3188
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3189
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3190
     '12345678901234'   chopTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3191
     '123456789012345'  chopTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3192
     '1234567890123456' chopTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3193
     'aShortString' chopTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3194
     'aVeryLongNameForAStringThatShouldBeShortened' chopTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3195
    "
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
    "Modified: / 24-10-2006 / 12:32:01 / cg"
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3198
!
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3199
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3200
concatenate:string1 and:string2
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3201
    "return the concatenation of myself and the arguments, string1 and string2.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3202
     This is equivalent to self , string1 , string2
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3203
     - 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
  3204
     is known to be a string."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3205
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3206
    ^ self , string1 , string2
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3207
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3208
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3209
concatenate:string1 and:string2 and:string3
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3210
    "return the concatenation of myself and the string arguments.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3211
     This is equivalent to self , string1 , string2 , string3
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3212
     - 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
  3213
     is known to be a string."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3214
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3215
    ^ self , string1 , string2 , string3
8040
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3216
!
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3217
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3218
contractAtBeginningTo:maxLen
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3219
    "if the receivers size is less or equal to maxLen, return it.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3220
     Otherwise, return a copy of the receiver, where some characters
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3221
     at the beginning have been replaced by '...' for a total string length
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3222
     of maxLen. Can be used to abbreviate long entries in tables."
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3223
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3224
    |sz|
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3225
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3226
    (sz := self size) <= maxLen ifTrue:[ ^ self ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3227
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3228
    ^ '...' , (self copyFrom:(sz - (maxLen - 4)))
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3229
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3230
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3231
     '12345678901234' contractAtBeginningTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3232
     '123456789012345' contractAtBeginningTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3233
     '1234567890123456' contractAtBeginningTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3234
     'aShortString' contractAtBeginningTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3235
     'aVeryLongNameForAStringThatShouldBeShortened' contractAtBeginningTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3236
    "
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
    "Modified: / 24-10-2006 / 12:32:13 / cg"
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
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3241
contractAtEndTo:maxLen
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3242
    "if the receivers size is less or equal to maxLen, return it.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3243
     Otherwise, return a copy of the receiver, where some characters
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3244
     at the end have been replaced by '...' for a total string length
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3245
     of maxLen. Can be used to abbreviate long entries in tables."
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3246
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3247
    |sz|
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3248
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3249
    (sz := self size) <= maxLen ifTrue:[ ^ self ].
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
    ^ (self copyTo:maxLen-3),'...'
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3252
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
     '12345678901234' contractAtEndTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3255
     '123456789012345' contractAtEndTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3256
     '1234567890123456' contractAtEndTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3257
     'aShortString' contractAtEndTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3258
     'aVeryLongNameForAStringThatShouldBeShortened' contractAtEndTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3259
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3260
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3261
    "Modified: / 24-10-2006 / 12:32:26 / cg"
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
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3264
contractLeftTo:maxLen
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3265
    "if the receivers size is less or equal to maxLen, return it.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3266
     Otherwise, return a copy of the receiver, where some characters
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3267
     near the first quarter have been replaced by '...' for a total string length
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3268
     of maxLen.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3269
     Very similar to contractTo:, but better to abbreviate long filename entries,
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3270
     where the right part is of more use than the left."
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3271
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3272
    |sz "{ SmallInteger }"
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3273
     halfSize quarterSize "{ SmallInteger }"
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3274
     leftEnd rightEnd rightStart|
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3275
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3276
    (sz := self size) <= maxLen ifTrue:[ ^ self ].
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
    halfSize := maxLen // 2.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3279
    quarterSize := maxLen // 4.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3280
    leftEnd := quarterSize-1.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3281
    rightEnd := maxLen - leftEnd - 3.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3282
    rightStart := sz - rightEnd + 1.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3283
    ^ (self copyTo:leftEnd),'...',(self copyFrom:rightStart)
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3284
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3285
    "
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3286
     '12345678901234' contractLeftTo:15
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3287
     '123456789012345' contractLeftTo:15
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3288
     '1234567890123456' contractLeftTo:15
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3289
     'aShortString' contractLeftTo:15
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3290
     'aVeryLongNameForAStringThatShouldBeShortened' contractLeftTo:15
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3291
     '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
  3292
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3293
!
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3294
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3295
contractTo:maxLen
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3296
    "if the receivers size is less or equal to maxLen, return it.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3297
     Otherwise, return a copy of the receiver, where some characters
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3298
     in the middle have been replaced by '...' for a total string length
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3299
     of maxLen. Can be used to abbreviate long entries in tables."
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3300
17841
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  3301
    |sz "{ SmallInteger }" leftSize rightSize|
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3302
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3303
    (sz := self size) <= maxLen ifTrue:[ ^ self ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3304
17841
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  3305
    rightSize := maxLen // 2.
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  3306
    leftSize := maxLen - rightSize.
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  3307
    leftSize := leftSize - 1.
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  3308
    rightSize := rightSize - 2.
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  3309
    ^ (self copyTo:leftSize),'...',(self copyFrom:(sz+1-rightSize))
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  3310
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  3311
    "
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  3312
     '12345678901234' contractTo:15          
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3313
     '123456789012345' contractTo:15
17841
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  3314
     '1234567890123456' contractTo:15 
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  3315
     'aShortString' contractTo:15  
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3316
     'aVeryLongNameForAStringThatShouldBeShortened' contractTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3317
     'C:\Dokumente und Einstellungen\cg\work\bosch\dapas\hw_schnittstellen\DAPAS__HpibDLL.st' contractTo:40
17841
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  3318
     ('1234567890123456789012345678901234567' contractTo:30) size  
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  3319
     ('1234567890123456789012345678901234567' contractTo:29) size   
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  3320
    "
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  3321
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  3322
    "Modified: / 05-05-2011 / 16:28:15 / cg"
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3323
!
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3324
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3325
copyReplaceString:subString withString:newString
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3326
    "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
  3327
     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
  3328
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3329
    |tmpStream idx idx1|
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3330
11348
366457915f90 care for wide-character strings in copyReplaceStringWithString
Claus Gittinger <cg@exept.de>
parents: 11345
diff changeset
  3331
    tmpStream := CharacterWriteStream on:(self class new).
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3332
    idx := 1.
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3333
    [idx ~~ 0] whileTrue:[
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3334
	idx1 := idx.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3335
	idx := self indexOfSubCollection:subString startingAt:idx.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3336
	idx ~~ 0 ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3337
	    tmpStream nextPutAll:(self copyFrom:idx1 to:idx-1).
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3338
	    tmpStream nextPutAll:newString.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3339
	    idx := idx + subString size
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3340
	]
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3341
    ].
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3342
    tmpStream nextPutAll:(self copyFrom:idx1).
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3343
    ^ tmpStream contents
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
   "
9306
de9b438212b8 comment
Stefan Vogel <sv@exept.de>
parents: 9282
diff changeset
  3346
     '12345678901234567890' copyReplaceString:'123' withString:'OneTwoThree'
de9b438212b8 comment
Stefan Vogel <sv@exept.de>
parents: 9282
diff changeset
  3347
     '12345678901234567890' copyReplaceString:'123' withString:'*'
de9b438212b8 comment
Stefan Vogel <sv@exept.de>
parents: 9282
diff changeset
  3348
     '12345678901234567890' copyReplaceString:'234' withString:'foo'
de9b438212b8 comment
Stefan Vogel <sv@exept.de>
parents: 9282
diff changeset
  3349
de9b438212b8 comment
Stefan Vogel <sv@exept.de>
parents: 9282
diff changeset
  3350
     ('a string with spaces' copyReplaceAll:$  withAll:' foo ')
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3351
	copyReplaceString:'foo' withString:'bar'
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3352
    "
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3353
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3354
    "Modified: / 31-05-1999 / 12:33:59 / cg"
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3355
    "Created: / 12-05-2004 / 12:00:00 / cg"
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3356
!
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3357
8040
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3358
copyWith:aCharacter
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3359
    "return a new string containing the receivers characters
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3360
     and the single new character, aCharacter.
8040
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3361
     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
  3362
     as argument, but equivalent to copy-and-addLast.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3363
     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
  3364
     (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
  3365
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3366
    |sz newString|
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3367
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3368
    aCharacter bitsPerCharacter > self bitsPerCharacter ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3369
	sz := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3370
	newString := aCharacter stringSpecies new:sz + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3371
	newString replaceFrom:1 to:sz with:self startingAt:1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3372
	newString at:sz+1 put:aCharacter.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3373
	^ newString.
8040
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3374
    ].
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3375
    ^ super copyWith:aCharacter
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3376
! !
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3377
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3378
!CharacterArray methodsFor:'displaying'!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3379
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3380
displayOn:aGC x:x y:y from:start to:stop
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3381
    "display the receiver on a GC"
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3382
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3383
    self displayOn:aGC x:x y:y from:start to:stop opaque:false
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3384
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3385
    "Modified: 12.5.1996 / 12:49:33 / cg"
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3386
!
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3387
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3388
displayOn:aGC x:x y:y from:start to:stop opaque:opaque
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3389
    "display the receiver on a GC"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3390
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3391
    "q&d hack"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3392
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3393
    (start == 1 and:[stop == self size]) ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3394
	self displayOn:aGC x:x y:y opaque:opaque.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3395
    ] ifFalse:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3396
	(self copyFrom:start to:stop) displayOn:aGC x:x y:y opaque:opaque.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3397
    ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3398
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3399
7082
675482728016 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7022
diff changeset
  3400
displayOn:aGc x:x y:y opaque:opaque
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3401
    "display the receiver in a graphicsContext - this method allows
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3402
     strings to be used like DisplayObjects."
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3403
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3404
    |s|
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3405
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3406
    s := self string.
7082
675482728016 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7022
diff changeset
  3407
    opaque ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3408
	aGc displayOpaqueString:s x:x y:y.
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3409
    ] ifFalse:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3410
	aGc displayString:s x:x y:y.
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3411
    ].
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  3412
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  3413
    "Modified: 11.5.1996 / 14:42:48 / cg"
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  3414
!
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  3415
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3416
displayOpaqueOn:aGC x:x y:y from:start to:stop
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3417
    "display the receiver on a GC"
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3418
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3419
    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
  3420
! !
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3421
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3422
!CharacterArray methodsFor:'emphasis'!
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3423
11632
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3424
actionForAll:aBlock
17734
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3425
    "change the action block of all characters.
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3426
     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
  3427
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3428
    ^ self asText actionForAll:aBlock
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3429
!
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3430
5732
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3431
allBold
17734
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3432
    "return a text object representing the receiver, but all boldified"
5732
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3433
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3434
    "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
  3435
    Text isNil ifTrue:[^ self].
5732
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3436
    ^ self asText allBold
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3437
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3438
    "
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3439
     Transcript showCR:'hello' asText allBold
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3440
     Transcript showCR:'hello' allBold
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3441
    "
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3442
!
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3443
5898
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3444
allItalic
17734
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3445
    "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
  3446
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3447
    "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
  3448
    Text isNil ifTrue:[^ self].
5898
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3449
    ^ self asText allItalic
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3450
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3451
    "
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3452
     Transcript showCR:'hello' asText allItalic
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3453
     Transcript showCR:'hello' allItalic
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3454
    "
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3455
!
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3456
11345
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3457
allStrikedOut
17734
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3458
    "return a text object representing the receiver, but all in strikeout"
11345
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3459
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3460
    "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
  3461
    Text isNil ifTrue:[^ self].
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3462
    ^ self asText allStrikedOut
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3463
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3464
    "
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3465
     Transcript showCR:'hello' asText allStrikedOut
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3466
     Transcript showCR:'hello' allStrikedOut
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3467
    "
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3468
!
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3469
10862
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3470
allUnderlined
17734
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3471
    "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
  3472
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3473
    "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
  3474
    Text isNil ifTrue:[^ self].
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3475
    ^ self asText allUnderlined
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3476
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3477
    "
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3478
     Transcript showCR:'hello' asText allUnderlined
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3479
     Transcript showCR:'hello' allUnderlined
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3480
    "
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3481
!
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3482
6228
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3483
colorizeAllWith:aColor
17734
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3484
    "return a text object representing the receiver, but all colorized"
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3485
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3486
    "this test allows for small non-gui apps to be built without libbasic2 (where Text is)"
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3487
    Text isNil ifTrue:[^ self].
6228
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3488
    ^ self asText colorizeAllWith:aColor
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3489
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3490
    "
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3491
     Transcript showCR:('hello' colorizeAllWith:Color red)
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3492
     Transcript showCR:('world' colorizeAllWith:Color green darkened)
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3493
    "
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3494
!
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3495
17734
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3496
colorizeAllWith:fgColor on:bgColor
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3497
    "return a text object representing the receiver, but all colorized with
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3498
     both fg and background color"
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3499
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3500
    "this test allows for small non-gui apps to be built without libbasic2 (where Text is)"
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3501
    Text isNil ifTrue:[^ self].
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3502
    ^ self asText colorizeAllWith:fgColor on:bgColor
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3503
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3504
    "
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3505
     Transcript showCR:('hello' colorizeAllWith:Color red on:Color yellow)
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3506
     Transcript showCR:('world' colorizeAllWith:Color red)
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3507
    "
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3508
!
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3509
1396
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3510
emphasis
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3511
    "return the emphasis.
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3512
     Since characterArrays do not hold any emphasis information,
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3513
     nil (no emphasis) is returned here."
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3514
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3515
    ^ RunArray new:self size withAll:nil
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3516
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3517
    "Created: 14.5.1996 / 13:58:58 / cg"
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3518
!
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3519
6655
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3520
emphasis:emphasisCollection
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3521
    ^ self asText emphasis:emphasisCollection
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3522
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3523
    "
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3524
     Transcript showCR:('hello' emphasis:#(bold bold bold bold bold))
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3525
    "
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3526
!
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3527
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3528
emphasisAt:characterIndex
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3529
    "return the emphasis at some index.
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3530
     Since characterArrays do not hold any emphasis information,
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3531
     nil (no emphasis) is returned here."
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3532
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3533
    ^ nil
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3534
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3535
    "Created: 11.5.1996 / 14:13:27 / cg"
1396
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3536
!
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3537
11632
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3538
emphasisAtPoint:aPoint on:aGC
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3539
    "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
  3540
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3541
    ^ nil
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3542
!
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3543
1396
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3544
emphasisCollection
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3545
    "return the emphasis.
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3546
     Since characterArrays do not hold any emphasis information,
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3547
     nil (no emphasis) is returned here."
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3548
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3549
    ^ RunArray new:(self size)
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3550
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3551
    "Created: 14.5.1996 / 13:58:58 / cg"
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3552
    "Modified: 14.5.1996 / 15:02:29 / cg"
3404
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  3553
!
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  3554
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3555
emphasiseFrom:start to:stop with:newEmphasis
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3556
    "set to the emphasis within some range. return the receiver"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3557
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3558
    ^ self asText emphasiseFrom:start to:stop with:newEmphasis
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3559
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3560
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3561
     'hello' emphasiseFrom:2 with:#italic
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3562
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3563
     Transcript showCR:('hello' emphasiseFrom:2 with:#italic)
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3564
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3565
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3566
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3567
emphasiseFrom:start with:newEmphasis
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3568
    "set to the emphasis within some range. return the receiver"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3569
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3570
    ^ self emphasiseFrom:start to:(self size) with:newEmphasis
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3571
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3572
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3573
     'hello' emphasiseFrom:2 with:#italic
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3574
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3575
     Transcript showCR:('hello' emphasiseFrom:2 with:#italic)
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3576
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3577
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3578
3404
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  3579
emphasizeAllWith:emphasis
17734
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3580
    "return a text object representing the receiver, but all emphasized"
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3581
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3582
    "this test allows for small non-gui apps to be built without libbasic2 (where Text is)"
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3583
    Text isNil ifTrue:[^ self].
3404
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  3584
    ^ self asText emphasizeAllWith:emphasis
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  3585
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  3586
    "
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  3587
     Transcript showCR:('hello' emphasizeAllWith:#bold)
3599
fea09a812f55 comment
Claus Gittinger <cg@exept.de>
parents: 3578
diff changeset
  3588
     Transcript showCR:('hello' emphasizeAllWith:(#color -> Color red))
fea09a812f55 comment
Claus Gittinger <cg@exept.de>
parents: 3578
diff changeset
  3589
     Transcript showCR:('hello' emphasizeAllWith:(#color -> Color red))
fea09a812f55 comment
Claus Gittinger <cg@exept.de>
parents: 3578
diff changeset
  3590
    "
fea09a812f55 comment
Claus Gittinger <cg@exept.de>
parents: 3578
diff changeset
  3591
fea09a812f55 comment
Claus Gittinger <cg@exept.de>
parents: 3578
diff changeset
  3592
    "Modified: / 17.6.1998 / 12:51:44 / cg"
5097
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3593
!
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3594
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3595
makeSelectorBoldIn:aClass
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3596
    "the receiver represents some source code for
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3597
     a method in aClass.
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3598
     Change myself to boldify the selector.
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3599
     Not yet implemented (could easily use the syntaxHighlighter
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3600
     for this ...)"
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3601
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3602
    ^ self
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3603
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3604
    "Modified: / 13.12.1999 / 21:49:11 / cg"
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  3605
    "Created: / 13.12.1999 / 21:49:24 / cg"
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  3606
!
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  3607
17734
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3608
withoutBackgroundColorEmphasis
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3609
    ^ self
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3610
!
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3611
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  3612
withoutEmphasis:emphasisToRemove
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  3613
    ^ self
17734
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3614
!
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3615
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3616
withoutForegroundColorEmphasis
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  3617
    ^ self
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3618
! !
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3619
7265
3b007758ff5b method category rename
Claus Gittinger <cg@exept.de>
parents: 7261
diff changeset
  3620
!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
  3621
17754
5322906cdb6a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17751
diff changeset
  3622
decodeAsLiteralArray
5322906cdb6a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17751
diff changeset
  3623
    "given a literalEncoding in the receiver,
5322906cdb6a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17751
diff changeset
  3624
     create & return the corresponding object.
5322906cdb6a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17751
diff changeset
  3625
     The inverse operation to #literalArrayEncoding."
5322906cdb6a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17751
diff changeset
  3626
5322906cdb6a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17751
diff changeset
  3627
    ^ self
5322906cdb6a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17751
diff changeset
  3628
!
5322906cdb6a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17751
diff changeset
  3629
991
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
  3630
decodeFrom:encodingSymbol
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3631
    "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
  3632
     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
  3633
ca774158b317 code cleanup (removed old obsolete encoding stuff)
Claus Gittinger <cg@exept.de>
parents: 8102
diff changeset
  3634
    |myEncoding encoder|
7950
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  3635
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  3636
    encodingSymbol isNil ifTrue:[^ self].
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  3637
    myEncoding := self encoding.
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  3638
    encodingSymbol == myEncoding ifTrue:[^ self].
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  3639
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  3640
    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
  3641
    encoder isNil ifTrue:[^ self].
ca774158b317 code cleanup (removed old obsolete encoding stuff)
Claus Gittinger <cg@exept.de>
parents: 8102
diff changeset
  3642
    ^ 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
  3643
!
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
  3644
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3645
encodeFrom:oldEncoding into:newEncoding
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3646
    ^ CharacterEncoder encodeString:self from:oldEncoding into:newEncoding
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3647
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3648
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3649
rot13
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3650
     "Usenet: from `rotate alphabet 13 places']
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3651
      The simple Caesar-cypher encryption that replaces each English
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3652
      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
  3653
      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
  3654
      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
  3655
      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
  3656
      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
  3657
      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
  3658
      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
  3659
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3660
    ^ self rot:13
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3661
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3662
    "
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3663
     'hello world' rot13
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3664
     'hello world' rot13 rot13
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3665
    "
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3666
!
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3667
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3668
rot:n
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3669
     "Usenet: from `rotate alphabet N places']
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3670
      The simple Caesar-cypher encryption that replaces each English
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3671
      letter with the one N places forward or back along the alphabet,
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3672
      so that 'The butler did it!!' becomes 'Gur ohgyre qvq vg!!' by rot 13
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3673
      Most Usenet news reading and posting programs include a rot13 feature.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3674
      It is used to enclose the text in a sealed wrapper that the reader must choose
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3675
      to open -- e.g., for posting things that might offend some readers, or spoilers.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3676
      A major advantage of rot13 over rot(N) for other N is that it
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3677
      is self-inverse, so the same code can be used for encoding and decoding."
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3678
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3679
    ^ self species
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3680
	streamContents:[:aStream |
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3681
	    self do:[:char |
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3682
		aStream nextPut:(char rot:n) ]]
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3683
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3684
    "
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3685
     'hello world' rot:13
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3686
     ('hello world' rot:13) rot:13
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3687
    "
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3688
!
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  3689
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3690
utf8Decoded
7950
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  3691
    "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
  3692
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3693
    |in out is16Bit c|
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3694
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3695
    is16Bit := false.
11326
11ce7ae19315 changed #utf8Decoded - use CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 11320
diff changeset
  3696
    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
  3697
    in := self readStream.
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3698
    [in atEnd] whileFalse:[
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3699
	c := Character utf8DecodeFrom:in.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3700
	out nextPut:c.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3701
    ].
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3702
    ^ out contents
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3703
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3704
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3705
     #[16rC8 16rA0] asString utf8Decoded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3706
     (Character value:16r220) utf8Encoded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3707
     (Character value:16r220) utf8Encoded utf8Decoded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3708
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3709
     (Character value:16r800) utf8Encoded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3710
     (Character value:16r220) utf8Encoded utf8Decoded
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3711
    "
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3712
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3713
    "test:
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3714
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3715
      |utf8Encoding original readBack|
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3716
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3717
      1 to:16rFFFF do:[:ascii |
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3718
	original := (Character value:ascii) asString.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3719
	utf8Encoding := original utf8Encoded.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3720
	readBack := utf8Encoding utf8Decoded.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3721
	readBack = original ifFalse:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3722
	    self halt
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3723
	]
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3724
      ]
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3725
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3726
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3727
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3728
utf8DecodedWithTwoByteCharactersReplacedBy:replacementCharacter
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3729
    "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
  3730
     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
  3731
     and replace them with replacementCharacter"
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
    |in out c|
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3734
8222
f2c454a9a038 replaced '' writeStream by String writeStream
Claus Gittinger <cg@exept.de>
parents: 8124
diff changeset
  3735
    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
  3736
    in := self readStream.
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3737
    [in atEnd] whileFalse:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3738
	c := Character utf8DecodeFrom:in.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3739
	c codePoint > 16rFF ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3740
	    c := replacementCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3741
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3742
	out nextPut:c.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3743
    ].
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3744
    ^ out contents
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3745
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  3746
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3747
     (Character value:16r220) utf8Encoded
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3748
	utf8DecodedWithTwoByteCharactersReplacedBy:(Character space)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3749
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3750
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3751
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3752
utf8Encoded
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3753
    "Return my UTF-8 representation as a new String"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3754
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3755
    |s|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3756
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3757
    s := WriteStream on:(String uninitializedNew:self size).
11320
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  3758
    s nextPutAllUtf8:self.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3759
    ^ s contents
11320
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  3760
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  3761
    "
17847
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  3762
     'abcde' utf8Encoded
17765
e3ee4a675abc Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17763
diff changeset
  3763
    "
e3ee4a675abc Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17763
diff changeset
  3764
e3ee4a675abc Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17763
diff changeset
  3765
    "Modified: / 11-05-2010 / 19:12:37 / cg"
9192
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
11345
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3768
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3769
!CharacterArray methodsFor:'matching - glob expressions'!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3770
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3771
compoundMatch:aString
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3772
    "like match, but the receiver may be a compound match pattern,
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3773
     consisting of multiple simple GLOB patterns, separated by semicolons.
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3774
     This is usable with fileName pattern fields.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3775
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3776
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3777
             NOT the ST-80 meaning.
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3778
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3779
     NOTICE: the receiver is the match pattern"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3780
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3781
    ^self compoundMatch:aString ignoreCase:false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3782
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3783
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3784
     'f*' match:'foo'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3785
     'b*' match:'foo'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3786
     'f*;b*' match:'foo'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3787
     'f*;b*' match:'bar'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3788
     'f*;b*' compoundMatch:'foo'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3789
     'f*;b*' compoundMatch:'bar'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3790
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3791
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3792
    "Modified: / 30.1.1998 / 11:40:18 / stefan"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3793
    "Modified: / 16.12.1999 / 01:22:08 / cg"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3794
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3795
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3796
compoundMatch:aString ignoreCase:ignoreCase
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3797
    "like match, but the receiver may be a compound match pattern,
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3798
     consisting of multiple simple GLOB patterns, separated by semicolons.
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3799
     This is usable with fileName pattern fields.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3800
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3801
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3802
             NOT the ST-80 meaning.
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3803
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3804
     NOTICE: the receiver is the match pattern"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3805
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3806
    |matchers|
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3807
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3808
    matchers := self asCollectionOfSubstringsSeparatedBy:$;.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3809
    ^ matchers contains:[:aPattern |
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3810
        aPattern match:aString ignoreCase:ignoreCase escapeCharacter:nil
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3811
      ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3812
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3813
"/    matchers do:[:aPattern |
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3814
"/        (aPattern match:aString ignoreCase:ignoreCase) ifTrue:[^ true].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3815
"/    ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3816
"/    ^ false.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3817
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3818
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3819
     'f*' match:'foo'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3820
     'b*' match:'foo'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3821
     'f*;b*' match:'foo'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3822
     'f*;b*' match:'bar'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3823
     'f*;b*' compoundMatch:'foo'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3824
     'f*;b*' compoundMatch:'bar'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3825
     'f*;b*' compoundMatch:'Foo' ignoreCase:true
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3826
     'f*;b*' compoundMatch:'Bar' ignoreCase:true
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3827
     'f*;b*' compoundMatch:'ccc' ignoreCase:true
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3828
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3829
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3830
    "Modified: / 15.4.1997 / 15:50:33 / cg"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3831
    "Modified: / 30.1.1998 / 11:40:18 / stefan"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3832
    "Created: / 16.12.1999 / 01:21:35 / cg"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3833
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3834
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3835
findMatchString:matchString
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3836
    "like findString/indexOfSubCollection, but allowing GLOB match patterns.
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3837
     find matchstring; if found, return the index;
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3838
     if not found, return 0.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3839
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3840
     NOTICE: match-meta character interpretation is like in unix-matching,
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3841
             NOT the ST-80 meaning.
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3842
     NOTICE: this GLOB, which is different from regex matching (see matchesRegex:)
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3843
     NOTICE: the argument is the match pattern"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3844
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3845
    ^ self findMatchString:matchString startingAt:1 ignoreCase:false ifAbsent:0
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3846
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3847
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3848
findMatchString:matchString startingAt:index
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3849
    "like findString, but allowing GLOB match patterns.
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3850
     find matchstring, starting at index. if found, return the index;
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3851
     if not found, return 0.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3852
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3853
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3854
             NOT the ST-80 meaning.
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3855
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3856
     NOTICE: the argument is the match pattern"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3857
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3858
    ^ self findMatchString:matchString startingAt:index ignoreCase:false ifAbsent:0
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3859
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3860
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3861
findMatchString:matchString startingAt:index ignoreCase:ignoreCase ifAbsent:exceptionBlock
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3862
    "like findString, but allowing GLOB match patterns.
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3863
     find matchstring, starting at index. if found, return the index;
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3864
     if not found, return the result of evaluating exceptionBlock.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3865
     This is a q&d hack - not very efficient.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3866
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3867
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3868
             NOT the ST-80 meaning.
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3869
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3870
     NOTICE: the argument is the match pattern"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3871
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3872
    |firstChar firstSet
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3873
     startIndex "{ Class: SmallInteger }"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3874
     matchSize  "{ Class: SmallInteger }"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3875
     mySize     "{ Class: SmallInteger }"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3876
     realMatchString lcChar ucChar|
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3877
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3878
    matchSize := matchString size.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3879
    matchSize == 0 ifTrue:[^ index]. "empty string matches"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3880
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3881
    realMatchString := matchString.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3882
    (realMatchString endsWith:$*) ifFalse:[
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3883
        realMatchString := realMatchString , '*'.
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3884
        matchSize := matchSize + 1
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3885
    ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3886
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3887
    mySize := self size.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3888
    firstChar := realMatchString at:1.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3889
    firstChar == self class matchEscapeCharacter ifTrue:[
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3890
        firstChar := realMatchString at:2.
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3891
    ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3892
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3893
    firstChar asString includesMatchCharacters ifTrue:[
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3894
        index to:mySize do:[:col |
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3895
            (realMatchString match:self from:col to:mySize ignoreCase:ignoreCase)
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3896
            ifTrue:[^ col]
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3897
        ].
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3898
        ^ exceptionBlock value.
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3899
    ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3900
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3901
    lcChar := firstChar asLowercase.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3902
    ucChar := firstChar asUppercase.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3903
    (ignoreCase and:[ lcChar ~= ucChar]) ifTrue:[
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3904
        firstSet := Array with:ucChar with:lcChar.
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3905
        startIndex := self indexOfAny:firstSet startingAt:index.
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3906
    ] ifFalse:[
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3907
        startIndex := self indexOf:firstChar startingAt:index.
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3908
    ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3909
    [startIndex == 0] whileFalse:[
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3910
        (realMatchString match:self from:startIndex to:mySize ignoreCase:ignoreCase)
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3911
        ifTrue:[^ startIndex].
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3912
        firstSet notNil ifTrue:[
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3913
            startIndex := self indexOfAny:firstSet startingAt:(startIndex + 1).
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3914
        ] ifFalse:[
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3915
            startIndex := self indexOf:firstChar startingAt:(startIndex + 1).
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3916
        ].
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3917
    ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3918
    ^ exceptionBlock value
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3919
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3920
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3921
     'one two three four' findMatchString:'o[nu]'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3922
     'one two three four' findMatchString:'o[nu]' startingAt:3
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3923
     'one two three four one' findMatchString:'ONE' startingAt:3 ignoreCase:true ifAbsent:0
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3924
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3925
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3926
    "Modified: 13.9.1997 / 06:31:22 / cg"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3927
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3928
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3929
includesMatchString:matchString
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3930
    "like includesString, but allowing GLOB match patterns.
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3931
     find matchstring; if found, return true, otherwise return false.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3932
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3933
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3934
             NOT the ST-80 meaning.
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3935
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3936
     NOTICE: the argument is the match pattern"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3937
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3938
    ^ (self findMatchString:matchString) ~~ 0
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3939
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3940
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3941
     'hello world' includesMatchString:'h*'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3942
     'hello world' includesMatchString:'h[aeiou]llo'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3943
     'hello world' includesMatchString:'wor*'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3944
     'hello world' includesMatchString:'woR*'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3945
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3946
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3947
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3948
includesMatchString:matchString caseSensitive:caseSensitive
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3949
    "like includesString, but allowing GLOB match patterns.
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3950
     find matchstring; if found, return true, otherwise return false.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3951
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3952
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3953
             NOT the ST-80 meaning.
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3954
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3955
     NOTICE: the argument is the match pattern"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3956
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3957
    ^ (self findMatchString:matchString startingAt:1 ignoreCase:caseSensitive not ifAbsent:0) ~~ 0
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3958
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3959
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3960
     'hello world' includesMatchString:'h*' caseSensitive:true
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3961
     'hello world' includesMatchString:'h*' caseSensitive:false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3962
     'Hello world' includesMatchString:'h*' caseSensitive:true
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3963
     'Hello world' includesMatchString:'h*' caseSensitive:false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3964
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3965
     'hello world' includesMatchString:'h[aeiou]llo' caseSensitive:true
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3966
     'hello world' includesMatchString:'h[aeiou]llo' caseSensitive:false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3967
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3968
     'hello world' includesMatchString:'wor*' caseSensitive:true
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3969
     'hello world' includesMatchString:'wor*' caseSensitive:false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3970
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3971
     'hello world' includesMatchString:'woR*' caseSensitive:true
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3972
     'hello world' includesMatchString:'woR*' caseSensitive:false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3973
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3974
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3975
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3976
match:aString
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3977
    "return true if aString matches self, where self may contain GLOB meta-match
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3978
     characters $* (to match any string) or $# (to match any character).
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3979
     or [...] to match a set of characters.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3980
     Lower/uppercase are considered different.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3981
     The escape character is the backQuote.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3982
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3983
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3984
             NOT the ST-80 meaning.
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  3985
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3986
     NOTICE: the receiver is the match pattern"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3987
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3988
    ^ self match:aString from:1 to:aString size ignoreCase:false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3989
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3990
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3991
     '\*f*' match:'f'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3992
     '\*f*' match:'*f'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3993
     '*\*f*' match:'*f'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3994
     '*f*' match:'*f'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3995
     '*ute*' match:'computer'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3996
     '*uter' match:'computer'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3997
     'uter*' match:'computer'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3998
     '*ute*' match:''
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  3999
     '[abcd]*' match:'computer'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4000
     '[abcd]*' match:'komputer'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4001
     '*some*compl*ern*' match:'this is some more complicated pattern match'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4002
     '*some*compl*ern*' match:'this is another complicated pattern match'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4003
     '*-hh' match:'anton-h'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4004
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4005
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4006
    "Modified: / 9.6.1998 / 18:50:00 / cg"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4007
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4008
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4009
match:aString escapeCharacter:escape
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4010
    "return true if aString matches self, where self may contain GLOB meta-match
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4011
     characters $* (to match any string) or $# (to match any character).
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4012
     or [...] to match a set of characters.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4013
     Lower/uppercase are considered different.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4014
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4015
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4016
             NOT the ST-80 meaning.
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4017
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4018
     NOTICE: the receiver is the match pattern"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4019
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4020
    ^ self match:aString from:1 to:aString size ignoreCase:false escapeCharacter:escape
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4021
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4022
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4023
     'a\b\c\*' match:'a\b\c\d'
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4024
     'a\b\c\*' match:'a\b\c\d' escapeCharacter:nil
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4025
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4026
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4027
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4028
match:aString from:start to:stop ignoreCase:ignoreCase
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4029
    "return true if part of aString matches myself,
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4030
     where self may contain GLOB meta-match
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4031
     characters $* (to match any string) or $# (to match any character)
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4032
     or [...] to match a set of characters.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4033
     If ignoreCase is true, lower/uppercase are considered the same.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4034
     The escape character is the backQuote.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4035
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4036
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4037
             NOT the ST-80 meaning.
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4038
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4039
     NOTICE: the receiver is the match pattern"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4040
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4041
    ^ self
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4042
        match:aString from:start to:stop ignoreCase:ignoreCase
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4043
        escapeCharacter:(self class matchEscapeCharacter)
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4044
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4045
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4046
     '*ute*' match:'12345COMPUTER' from:1 to:5 ignoreCase:true
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4047
     '*ute*' match:'12345COMPUTER' from:6 to:13 ignoreCase:true
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4048
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4049
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4050
    "Modified: / 10.11.1998 / 21:43:46 / cg"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4051
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4052
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4053
match:aString from:start to:stop ignoreCase:ignoreCase escapeCharacter:escape
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4054
    "return true if part of aString matches myself,
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4055
     where self may contain GLOB meta-match
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4056
     characters $* (to match any string) or $# (to match any character)
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4057
     or [...] to match a set of characters.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4058
     If ignoreCase is true, lower/uppercase are considered the same.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4059
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4060
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4061
             NOT the ST-80 meaning.
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4062
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4063
     NOTICE: the receiver is the match pattern"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4064
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4065
    |matchScanArray|
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4066
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4067
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4068
     keep the matchScanArray from the most recent match -
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4069
     avoids parsing the pattern over-and over if multiple searches
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4070
     are done with the same pattern.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4071
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4072
    (PreviousMatch notNil
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4073
    and:[PreviousMatch key = self]) ifTrue:[
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4074
        matchScanArray := PreviousMatch value
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4075
    ] ifFalse:[
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4076
        matchScanArray := self class matchScanArrayFrom:self escapeCharacter:escape.
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4077
        matchScanArray isNil ifTrue:[
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4078
            'CharacterArray [info]: invalid matchpattern:''' infoPrint. self infoPrint. ''' comparing for equality.' infoPrintCR.
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4079
            ^ self = aString
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4080
"/            ^ false
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4081
        ].
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4082
        PreviousMatch := self -> matchScanArray.
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4083
    ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4084
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4085
    ^ self class
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4086
        matchScan:matchScanArray
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4087
        from:1 to:matchScanArray size
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4088
        with:aString
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4089
        from:start to:stop
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4090
        ignoreCase:ignoreCase
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4091
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4092
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4093
     '*ute*' match:'12345COMPUTER' from:1 to:5 ignoreCase:true
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4094
     '*ute*' match:'12345COMPUTER' from:6 to:13 ignoreCase:true
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4095
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4096
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4097
    "Modified: / 10.11.1998 / 21:43:46 / cg"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4098
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4099
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4100
match:aString ignoreCase:ignoreCase
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4101
    "return true if aString matches self, where self may contain GLOB meta-match
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4102
     characters $* (to match any string) or $# (to match any character)
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4103
     or [...] to match a set of characters.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4104
     If ignoreCase is true, lower/uppercase are considered the same.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4105
     The escape character is the backQuote.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4106
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4107
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4108
             NOT the ST-80 meaning.
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4109
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4110
     NOTICE: the receiver is the match pattern"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4111
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4112
    ^ self match:aString from:1 to:aString size ignoreCase:ignoreCase
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4113
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4114
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4115
     '*ute*' match:'COMPUTER' ignoreCase:true
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4116
     '*uter' match:'COMPUTER' ignoreCase:false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4117
     '[abcd]*' match:'computer' ignoreCase:false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4118
     '[abcd]*' match:'Computer' ignoreCase:false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4119
     '[a-k]*' match:'komputer' ignoreCase:false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4120
     '[a-k]*' match:'zomputer' ignoreCase:false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4121
     '[a-k]*' match:'Komputer' ignoreCase:false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4122
     '[a-k]*' match:'Komputer' ignoreCase:true
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4123
     '*some*compl*ern*' match:'this is some more complicated pattern match' ignoreCase:true
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4124
     '*some*compl*ern*' match:'this is another complicated pattern match' ignoreCase:true
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4125
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4126
     Time millisecondsToRun:[
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4127
        Symbol allInstancesDo:[:sym |
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4128
            '[ab]*' match:sym ignoreCase:false
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4129
        ]
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4130
     ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4131
     Time millisecondsToRun:[
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4132
        Symbol allInstancesDo:[:sym |
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4133
            '*at:*' match:sym ignoreCase:false
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4134
        ]
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4135
     ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4136
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4137
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4138
    "Modified: 2.4.1997 / 17:28:58 / cg"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4139
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4140
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4141
match:aString ignoreCase:ignoreCase escapeCharacter:escape
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4142
    "return true if aString matches self, where self may contain GLOB meta-match
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4143
     characters $* (to match any string) or $# (to match any character)
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4144
     or [...] to match a set of characters.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4145
     If ignoreCase is true, lower/uppercase are considered the same.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4146
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4147
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4148
             NOT the ST-80 meaning.
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4149
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4150
     NOTICE: the receiver is the match pattern"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4151
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4152
    ^ self match:aString from:1 to:aString size ignoreCase:ignoreCase escapeCharacter:escape
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4153
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4154
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4155
     '*ute*' match:'COMPUTER' ignoreCase:true
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4156
     '*uter' match:'COMPUTER' ignoreCase:false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4157
     '[abcd]*' match:'computer' ignoreCase:false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4158
     '[abcd]*' match:'Computer' ignoreCase:false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4159
     '[a-k]*' match:'komputer' ignoreCase:false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4160
     '[a-k]*' match:'zomputer' ignoreCase:false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4161
     '[a-k]*' match:'Komputer' ignoreCase:false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4162
     '[a-k]*' match:'Komputer' ignoreCase:true
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4163
     '*some*compl*ern*' match:'this is some more complicated pattern match' ignoreCase:true
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4164
     '*some*compl*ern*' match:'this is another complicated pattern match' ignoreCase:true
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4165
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4166
     Time millisecondsToRun:[
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4167
        Symbol allInstancesDo:[:sym |
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4168
            '[ab]*' match:sym ignoreCase:false
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4169
        ]
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4170
     ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4171
     Time millisecondsToRun:[
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4172
        Symbol allInstancesDo:[:sym |
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4173
            '*at:*' match:sym ignoreCase:false
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4174
        ]
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4175
     ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4176
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4177
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4178
    "Modified: 2.4.1997 / 17:28:58 / cg"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4179
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4180
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4181
matches:aPatternString
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4182
    "return true if the receiver matches aString, where aPatternString may contain GLOB meta-match
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4183
     characters $* (to match any string) or $# (to match any character).
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4184
     or [...] to match a set of characters.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4185
     Lower/uppercase are considered different.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4186
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4187
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
17735
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4188
             NOT the ST-80 meaning.
6a5bc05f696a Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17734
diff changeset
  4189
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4190
     NOTICE: the receiver is the match pattern"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4191
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4192
    ^ aPatternString match:self
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4193
! !
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4194
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4195
17797
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4196
!CharacterArray methodsFor:'matching - regex'!
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4197
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4198
hasAnyRegexMatches: rxString
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4199
    "return true, if any substrings in the receiver, matches the regular expression in rxString"
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4200
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4201
    rxString asRegex matchesIn:self do:[:m | ^ true].
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4202
    ^ false
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4203
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4204
    "
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4205
     '1234 abcd 3456 defg' hasAnyRegexMatches:'[0-9]+'   
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4206
     'abcd 3456 defg' hasAnyRegexMatches:'[0-9]+'        
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4207
     'abcd xxax defg' hasAnyRegexMatches:'[0-9]+'        
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4208
    "
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4209
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4210
    "Created: / 13-08-2010 / 17:09:05 / sr"
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4211
!
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4212
17814
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4213
hasAnyRegexMatches: rxString ignoringCase:aBoolean
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4214
    "return true, if any substrings in the receiver, matches the regular expression in rxString"
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4215
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4216
    aBoolean ifTrue:[
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4217
        ^ self hasAnyRegexMatchesIgnoringCase: rxString
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4218
    ] ifFalse:[
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4219
        ^ self hasAnyRegexMatches: rxString
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4220
    ].
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4221
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4222
    "
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4223
     '1234 abcd 3456 defg' hasAnyRegexMatches:'[0-9]+'   
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4224
     'abcd 3456 defg' hasAnyRegexMatches:'[0-9]+'        
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4225
     'abcd xxax defg' hasAnyRegexMatches:'[0-9]+'        
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4226
     'arith [arc]' hasAnyRegexMatches:'(ab)+'        
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4227
     'arith [arc]' hasAnyRegexMatches:'(ab)*'        
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4228
    "
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4229
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4230
    "Created: / 13-12-2010 / 11:03:05 / cg"
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4231
!
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4232
17797
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4233
hasAnyRegexMatchesIgnoringCase: rxString
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4234
    "return true, if any substrings in the receiver, matches the regular expression in rxString"
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4235
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4236
    rxString asRegexIgnoringCase matchesIn:self do:[:m | ^ true].
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4237
    ^ false
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4238
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4239
    "
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4240
     'ABCD XYZ DEFG' hasAnyRegexMatchesIgnoringCase:'[a-z]+'        
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4241
     'ABCD XYZ DEFG' hasAnyRegexMatches:'[a-z]+'        
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4242
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4243
     '1234 abcd 3456 defg' hasAnyRegexMatchesIgnoringCase:'[a-z]+'   
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4244
     'abcd 3456 defg' hasAnyRegexMatchesIgnoringCase:'[a-z]+'        
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4245
    "
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4246
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4247
    "Created: / 13-08-2010 / 17:11:11 / sr"
17814
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4248
!
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4249
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4250
matchesRegex:regexString ignoringCase:aBoolean
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4251
    "Test if the receiver matches a regex.
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4252
     May raise RxParser>>regexErrorSignal or child signals.
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4253
     This is a part of the Regular Expression Matcher package,
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4254
        (c) 1996, 1999 Vassili Bykov.
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4255
     Refer to `documentation' protocol of RxParser class for details."
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4256
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4257
    aBoolean ifTrue:[
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4258
        ^ self matchesRegexIgnoringCase:regexString
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4259
    ] ifFalse:[
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4260
        ^ self matchesRegex:regexString
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4261
    ].
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4262
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4263
    "
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4264
     'hello world' matchesRegex:'h.*d'.
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4265
    "
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4266
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4267
    "Created: / 13-12-2010 / 11:01:49 / cg"
17797
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4268
! !
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4269
!CharacterArray methodsFor:'padded copying'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4270
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4271
centerPaddedTo:newSize
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4272
     "return a new string consisting of the receivers characters,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4273
     plus spaces up to length and center the receivers characters in
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4274
     the resulting string.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4275
     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
  4276
     the original receiver is returned unchanged."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4277
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4278
     ^ self centerPaddedTo:newSize with:(Character space)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4279
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4280
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4281
     'foo' centerPaddedTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4282
     123 printString centerPaddedTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4283
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4284
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4285
    "Created: 25.11.1995 / 10:53:57 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4286
!
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4287
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4288
centerPaddedTo:size with:padCharacter
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4289
    "return a new string of length size, which contains the receiver
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4290
     centered (i.e. padded on both sides).
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4291
     Characters are filled with padCharacter.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4292
     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
  4293
     the original receiver is returned unchanged."
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4294
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4295
    |len s|
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4296
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4297
    len := self size.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4298
    (len < size) ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4299
	s := self species new:size withAll:padCharacter.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4300
	s replaceFrom:(size - len) // 2  + 1 with:self.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4301
	^ s
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
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4304
    "
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4305
     'foo' centerPaddedTo:11 with:$.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4306
     'fooBar' centerPaddedTo:5 with:$.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4307
     123 printString centerPaddedTo:10 with:$.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4308
     (' ' , 123 printString) centerPaddedTo:10 with:$.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4309
     (Float pi printString) centerPaddedTo:15 with:(Character space)
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4310
     (Float pi printString) centerPaddedTo:15 with:$-
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4311
     (' ' , Float pi class name) centerPaddedTo:15 with:$.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4312
    "
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4313
!
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4314
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4315
decimalPaddedTo:size and:afterPeriod at:decimalCharacter
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4316
    "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
  4317
     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
  4318
     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
  4319
     to be padded).
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4320
     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
  4321
     the original receiver is returned unchanged.
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4322
     (sounds complicated ? -> see examples below)."
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4323
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4324
    ^ self
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4325
	decimalPaddedTo:size
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4326
	and:afterPeriod
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4327
	at:decimalCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4328
	withLeft:(Character space)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4329
	right:$0
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4330
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4331
    "
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4332
     '123' decimalPaddedTo:10 and:3 at:$.      -> '   123    '
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4333
     '123' decimalPaddedTo:10 and:3 at:$.      -> '   123.000'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4334
     '123.' decimalPaddedTo:10 and:3 at:$.     -> '   123.000'
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4335
     '123.1' decimalPaddedTo:10 and:3 at:$.    -> '   123.100'
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4336
     '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
  4337
     '123.123' decimalPaddedTo:10 and:3 at:$.  -> '   123.123'
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4338
    "
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4339
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4340
    "Created: 23.12.1995 / 13:11:52 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4341
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4342
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4343
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
  4344
    "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
  4345
     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
  4346
     of the period.
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4347
     Characters on the left are filled with leftPadChar.
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4348
     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
  4349
     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
  4350
     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
  4351
     the original receiver is returned unchanged.
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4352
     (sounds complicated ? -> see examples below)."
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4353
5230
655c21ffe6cc care for negative size of rest-string when decimalPadding
Claus Gittinger <cg@exept.de>
parents: 5221
diff changeset
  4354
    |s idx n rest|
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4355
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4356
    idx := self indexOf:decimalCharacter.
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4357
    idx == 0 ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4358
	"/
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4359
	"/ 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
  4360
	"/
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4361
	rightPadChar isNil ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4362
	    s := self , (self species new:afterPeriod + 1 withAll:leftPadChar)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4363
	] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4364
	    s:= self , decimalCharacter asString , (self species new:afterPeriod withAll:rightPadChar).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4365
	].
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4366
    ] ifFalse:[
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4367
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4368
	"/ the number of after-decimalPoint characters
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4369
	n := self size - idx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4370
	rest := afterPeriod - n.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4371
	rest > 0 ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4372
	    s := (self species new:rest withAll:(rightPadChar ? leftPadChar)).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4373
	] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4374
	    s := ''
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4375
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4376
	s := self , s.
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4377
    ].
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4378
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4379
    ^ s leftPaddedTo:size with:leftPadChar
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4380
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4381
    "
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4382
     '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
  4383
     '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
  4384
     '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
  4385
     '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
  4386
     '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
  4387
     '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
  4388
    "
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4389
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4390
    "Modified: 23.12.1995 / 13:08:18 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4391
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4392
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4393
leftPaddedTo:size
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4394
    "return a new string of length size, which contains the receiver
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4395
     right-adjusted (i.e. padded on the left).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4396
     Characters on the left are filled with spaces.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4397
     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
  4398
     the original receiver is returned unchanged."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4399
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4400
    ^ self leftPaddedTo:size with:(Character space)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4401
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4402
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4403
     'foo' leftPaddedTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4404
     'fooBar' leftPaddedTo:5
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4405
     123 printString leftPaddedTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4406
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4407
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4408
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4409
paddedTo:newSize
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4410
     "return a new string consisting of the receivers characters,
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4411
     plus spaces up to length.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4412
     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
  4413
     the original receiver is returned unchanged."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4414
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4415
     ^ self paddedTo:newSize with:(Character space)
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4416
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4417
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4418
     'foo' paddedTo:10
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4419
     123 printString paddedTo:10
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4420
    "
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  4421
! !
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  4422
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4423
!CharacterArray methodsFor:'printing & storing'!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4424
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4425
article
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4426
    "return an article string for the receiver."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4427
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4428
    |firstChar|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4429
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4430
    firstChar := (self at:1) asLowercase.
5848
ef81d77ca1ad UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5843
diff changeset
  4431
    ((firstChar isVowel and:[firstChar ~~ $u]) or:[firstChar == $x]) ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4432
	^ 'an'
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4433
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4434
    ^ 'a'
5848
ef81d77ca1ad UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5843
diff changeset
  4435
ef81d77ca1ad UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5843
diff changeset
  4436
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4437
	'uboot' article.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4438
	'xmas' article.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4439
	'alarm' article.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4440
	'baby' article.
5848
ef81d77ca1ad UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5843
diff changeset
  4441
    "
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4442
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4443
8049
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  4444
basicStoreString
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  4445
    "return a String for storing myself"
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  4446
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  4447
    |s n index|
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  4448
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  4449
    n := self occurrencesOf:$'.
11320
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  4450
    n ~~ 0 ifTrue:[
17742
3fef0ed4c2d5 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17735
diff changeset
  4451
        s := self class new:(n + 2 + self size).
3fef0ed4c2d5 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17735
diff changeset
  4452
        s at:1 put:$'.
3fef0ed4c2d5 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17735
diff changeset
  4453
        index := 2.
3fef0ed4c2d5 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17735
diff changeset
  4454
        self do:[:thisChar |
3fef0ed4c2d5 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17735
diff changeset
  4455
            (thisChar == $') ifTrue:[
3fef0ed4c2d5 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17735
diff changeset
  4456
                s at:index put:thisChar.
3fef0ed4c2d5 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17735
diff changeset
  4457
                index := index + 1.
3fef0ed4c2d5 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17735
diff changeset
  4458
            ].
3fef0ed4c2d5 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17735
diff changeset
  4459
            s at:index put:thisChar.
3fef0ed4c2d5 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17735
diff changeset
  4460
            index := index + 1.
3fef0ed4c2d5 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17735
diff changeset
  4461
        ].
3fef0ed4c2d5 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17735
diff changeset
  4462
        s at:index put:$'.
3fef0ed4c2d5 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17735
diff changeset
  4463
        ^ s
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4464
    ].
11320
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  4465
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4466
    ^ '''' , self , ''''
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4467
!
8049
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  4468
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4469
displayOn:aGCOrStream
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4470
    "Compatibility
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4471
     append a printed desription on some stream (Dolphin,  Squeak)
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4472
     OR:
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4473
     display the receiver in a graphicsContext at 0@0 (ST80).
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4474
     This method allows for any object to be displayed in some view
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4475
     (although the fallBack is to display its printString ...)"
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4476
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4477
    "/ what a kludge - Dolphin and Squeak mean: printOn: a stream;
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4478
    "/ ST/X (and some old ST80's) mean: draw-yourself on a GC.
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4479
    (aGCOrStream isStream or:[aGCOrStream == Transcript]) ifTrue:[
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4480
	self storeOn:aGCOrStream.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4481
	^ self
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4482
    ].
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4483
    ^ super displayOn:aGCOrStream
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4484
!
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4485
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4486
printOn:aStream
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4487
    "print the receiver on aStream"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4488
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4489
    aStream nextPutAll:self
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4490
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4491
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4492
printString
17807
06cc6c49e291 merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17800
diff changeset
  4493
    "return a string for printing - that's myself"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4494
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4495
    ^ self
3578
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4496
!
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4497
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4498
printWithQuotesDoubledOn:aStream
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4499
    "put the raw storeString of myself on aStream"
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4500
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4501
    self do:[:thisChar |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4502
	(thisChar == $') ifTrue:[aStream nextPut:thisChar].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4503
	aStream nextPut:thisChar
3578
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4504
    ]
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4505
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4506
    "Modified: / 15.6.1998 / 17:21:17 / cg"
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  4507
    "Created: / 15.6.1998 / 17:22:13 / cg"
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4508
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4509
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4510
printfWith:arg1 with:arg2 with:arg3 with:arg4 with:arg5
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4511
    "Format and print the receiver with <argI> formatted in C style,
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4512
     as specified in the Unix C-language manual page for printf(3).
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4513
     Return the resulting string."
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4514
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4515
    ^ self printf:(Array with:arg1 with:arg2 with:arg3 with:arg4 with:arg5)
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4516
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4517
    "
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4518
     Transcript showCR:('%d %05x %08o %b' printfWith:123 with:234 with:345 with:123)
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4519
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4520
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4521
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4522
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4523
!CharacterArray methodsFor:'queries'!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4524
4429
564b0fd9168e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4410
diff changeset
  4525
bitsPerCharacter
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4526
    "return the underlying strings bitsPerCharacter
4429
564b0fd9168e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4410
diff changeset
  4527
     (i.e. is it a regular String or a TwoByteString)"
564b0fd9168e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4410
diff changeset
  4528
8457
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4529
    |string max|
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4530
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4531
    (string := self string) ~~ self ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4532
	^ string bitsPerCharacter
8457
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4533
    ].
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4534
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4535
    max := 8.
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4536
    self do:[:eachCharacter |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4537
	max := max max:(eachCharacter bitsPerCharacter)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4538
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4539
    ^ max
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4540
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4541
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4542
     'hello' bitsPerCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4543
     'hello' asText allBold bitsPerCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4544
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4545
!
8457
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4546
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4547
contains8BitCharacters
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4548
    "return true, if the underlying string contains 8BitCharacters (or widers)
8457
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4549
     (i.e. if it is non-ascii)"
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4550
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4551
    |string|
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4552
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4553
    (string := self string) ~~ self ifTrue:[
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4554
	^ string contains8BitCharacters
8457
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4555
    ].
8900
8b669296f3eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8899
diff changeset
  4556
    ^ self contains:[:aCharacter | aCharacter codePoint > 16r7F ].
8457
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4557
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  4558
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4559
     'hello' contains8BitCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4560
     'hello' asText allBold contains8BitCharacters
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  4561
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4562
!
4429
564b0fd9168e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4410
diff changeset
  4563
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4564
continuesWith:aString startingAt:startIndex
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4565
    "return true, if the receiver beginning at startIndex
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4566
     contains the characters in aString."
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4567
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4568
    |sz  "{Class: SmallInteger }"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4569
     idx "{Class: SmallInteger }"|
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4570
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4571
    sz := aString size.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4572
    idx := startIndex.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4573
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4574
    1 to:sz do:[:i |
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4575
	(self at:idx) ~~ (aString at:i) ifTrue:[^ false].
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4576
	idx := idx + 1
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4577
    ].
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4578
    ^ true
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4579
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4580
    "
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4581
     'hello world' continuesWith:'world' startingAt:6
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4582
     'hello world' continuesWith:'world' startingAt:7
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4583
    "
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4584
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4585
    "Created: 12.5.1996 / 15:46:40 / cg"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4586
    "Modified: 26.7.1996 / 19:08:36 / cg"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4587
!
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4588
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4589
countWords
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4590
    "return the number of words, which are separated by separators"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4591
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4592
    |tally "{ Class: SmallInteger }"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4593
     start "{ Class: SmallInteger }"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4594
     mySize "{ Class: SmallInteger }"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4595
     stop ch|
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4596
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4597
    tally := 0.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4598
    start := 1.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4599
    mySize := self size.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4600
    [start <= mySize] whileTrue:[
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4601
	ch := self at:start.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4602
	ch isSeparator ifTrue:[
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4603
	    start := start + 1
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4604
	] ifFalse:[
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4605
	    stop := self indexOfSeparatorStartingAt:start.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4606
	    (stop == 0) ifTrue:[
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4607
		stop := mySize + 1
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4608
	    ].
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4609
	    tally := tally + 1.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4610
	    start := stop
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4611
	]
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4612
    ].
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4613
    ^ tally
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4614
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4615
    "
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4616
     'hello world isnt this nice' countWords'
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4617
    "
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4618
!
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  4619
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4620
defaultElement
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4621
    ^ Character space
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4622
!
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4623
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4624
encoding
1311
367f740d21e7 commentary
Claus Gittinger <cg@exept.de>
parents: 1308
diff changeset
  4625
    "return the strings encoding, as a symbol.
7982
0412a26c4621 encoding now unicode
Claus Gittinger <cg@exept.de>
parents: 7977
diff changeset
  4626
     Here, by default, we assume unicode-encoding.
0412a26c4621 encoding now unicode
Claus Gittinger <cg@exept.de>
parents: 7977
diff changeset
  4627
     Notice, that iso8859-1 is a true subset of unicode,
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4628
     and that singleByteStrings are therefore both unicode AND
7982
0412a26c4621 encoding now unicode
Claus Gittinger <cg@exept.de>
parents: 7977
diff changeset
  4629
     8859-1 encoded."
0412a26c4621 encoding now unicode
Claus Gittinger <cg@exept.de>
parents: 7977
diff changeset
  4630
0412a26c4621 encoding now unicode
Claus Gittinger <cg@exept.de>
parents: 7977
diff changeset
  4631
    ^ #'unicode'
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4632
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4633
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4634
hasChangeOfEmphasis
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4635
    ^ false
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4636
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  4637
    "Created: 12.5.1996 / 12:31:39 / cg"
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4638
!
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4639
7995
8ddbb403d67b +hasIcon and hasImage for LabelAndIcon compatibility
Claus Gittinger <cg@exept.de>
parents: 7991
diff changeset
  4640
hasIcon
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  4641
    "for LabelAndIcon compatibility"
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  4642
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4643
    ^ false
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4644
!
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
hasImage
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4647
    "for LabelAndIcon compatibility"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4648
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4649
    ^ false
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4650
!
7995
8ddbb403d67b +hasIcon and hasImage for LabelAndIcon compatibility
Claus Gittinger <cg@exept.de>
parents: 7991
diff changeset
  4651
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4652
heightOn:aGC
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4653
    "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
  4654
6528
cf4e93b8104b #on: -> #onDevice
Claus Gittinger <cg@exept.de>
parents: 6523
diff changeset
  4655
    ^ (aGC font onDevice:aGC device) heightOf:self
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4656
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4657
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4658
     'hello world' heightOn:(View new)
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4659
    "
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4660
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4661
    "Created: 12.5.1996 / 20:09:29 / cg"
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4662
    "Modified: 12.5.1996 / 20:32:05 / cg"
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4663
!
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4664
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4665
isLowercaseFirst
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4666
    "return true, if the first character is a lowercase character."
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4667
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4668
    ^ self size ~~ 0 and:[ self first isLowercase ]
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4669
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4670
    "
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4671
     'helloWorld' isLowercaseFirst
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4672
     'HelloWorld' isLowercaseFirst
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4673
    "
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4674
!
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4675
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4676
isUppercaseFirst
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4677
    "return true, if the first character is an uppercase character."
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4678
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4679
    ^ self size ~~ 0 and:[ self first isUppercase ]
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4680
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4681
    "
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4682
     'helloWorld' isUppercaseFirst
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  4683
     'HelloWorld' isUppercaseFirst
17728
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4684
    "
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4685
!
bbc5fa73dfab Merged with trunk r10466
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17727
diff changeset
  4686
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4687
knownAsSymbol
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4688
    "for now, only single character strings are allowed as symbols.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4689
     This method is redefined in String."
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4690
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4691
    ^ false
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4692
!
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4693
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4694
leftIndent
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4695
    "if the receiver starts with spaces, return the number of spaces
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4696
     at the left - otherwise, return 0.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4697
     If the receiver consists of spaces only, return the receivers size."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4698
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4699
    |index "{Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4700
     end   "{Class: SmallInteger }"|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4701
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4702
    index := 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4703
    end := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4704
    [index <= end] whileTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4705
	(self at:index) isSeparator ifFalse:[^ index - 1].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4706
	index := index + 1
8350
d9aaa0c937cb +isValidSmalltalkIdentifier
Claus Gittinger <cg@exept.de>
parents: 8347
diff changeset
  4707
    ].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4708
    ^ end
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4709
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4710
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4711
     '    hello' leftIndent
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4712
     'foo      ' leftIndent
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4713
     '         ' leftIndent
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4714
    "
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4715
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4716
    "Modified: 20.4.1996 / 19:28:43 / cg"
8350
d9aaa0c937cb +isValidSmalltalkIdentifier
Claus Gittinger <cg@exept.de>
parents: 8347
diff changeset
  4717
!
d9aaa0c937cb +isValidSmalltalkIdentifier
Claus Gittinger <cg@exept.de>
parents: 8347
diff changeset
  4718
10437
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4719
nameSpaceSelectorParts
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4720
    "Answer the namespace and baseSelector parts of a namespace selector.
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4721
     Namespace selectors are those generated by sends from a method in a different
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4722
     namespace; they are prefixed by ':'<ns>'::'.
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4723
     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
  4724
     Experimental"
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4725
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4726
    |nsPart selPart idx|
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4727
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4728
    (self at:1) == $: ifFalse:[^ Array with:'' with:self].
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4729
    idx := self indexOf:$: startingAt:3.
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4730
    idx == 0 ifTrue:[^ Array with:'' with:self].
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4731
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4732
    (idx+2 > self size) ifTrue:[^ Array with:'' with:self].
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4733
    (self at:idx+1) == $: ifFalse:[^ Array with:'' with:self].
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4734
    nsPart := self copyFrom:2 to:idx-1.
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4735
    selPart := self copyFrom:idx+2.
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4736
    ^ Array with:nsPart with:selPart
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4737
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4738
    "test:
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4739
     self assert:('+' nameSpaceSelectorParts) = #('' '+').
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4740
     self assert:(':+' nameSpaceSelectorParts) = #('' ':+').
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4741
     self assert:(':Foo:+' nameSpaceSelectorParts) = #('' ':Foo:+').
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4742
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4743
     self assert:(':Foo::+' nameSpaceSelectorParts) = #('Foo' '+').
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4744
     self assert:(':Foo::bar:baz:' nameSpaceSelectorParts) = #('Foo' 'bar:baz:').
10437
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4745
    "
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4746
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4747
    "Created: / 05-03-2007 / 17:16:58 / cg"
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4748
    "Modified: / 06-03-2007 / 11:51:15 / cg"
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4749
!
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  4750
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4751
stringSpecies
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4752
    "return the underlying strings bitsPerCharacter
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  4753
     (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
  4754
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  4755
    |string|
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  4756
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  4757
    (string := self string) == self ifTrue:[^ self class].
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  4758
    ^ string stringSpecies
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  4759
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  4760
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4761
     'hello' stringSpecies
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4762
     'hello' asText allBold stringSpecies
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4763
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4764
!
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  4765
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4766
widthFrom:startIndex to:endIndex on:aGC
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4767
    "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
  4768
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4769
    ^ (aGC font onDevice:aGC device) widthOf:self from:startIndex to:endIndex
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4770
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4771
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4772
     'hello world' widthFrom:1 to:5 on:(View new)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4773
     'hello' widthOn:(View new)
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4774
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4775
!
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4776
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4777
widthOn:aGC
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4778
    "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
  4779
6528
cf4e93b8104b #on: -> #onDevice
Claus Gittinger <cg@exept.de>
parents: 6523
diff changeset
  4780
    ^ (aGC font onDevice:aGC device) widthOf:self
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4781
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4782
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4783
     'hello world' widthOn:(View new)
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4784
    "
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4785
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  4786
    "Created: 12.5.1996 / 20:09:29 / cg"
2554
309ee6707322 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2551
diff changeset
  4787
    "Modified: 17.4.1997 / 12:50:23 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4788
! !
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4789
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4790
!CharacterArray methodsFor:'special string converting'!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4791
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4792
expandPlaceholdersWith:argArrayOrDictionary
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4793
    "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
  4794
     replaced by corresponding arguments' printStrings from the argArrayOrDictionary.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4795
     I.e. 'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this') results
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4796
     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
  4797
     As an extension, the argument may also be a dictionary, providing
7313
9be9b35f5370 comment
Claus Gittinger <cg@exept.de>
parents: 7312
diff changeset
  4798
     values for symbolic keys.
4842
0086acd80497 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  4799
     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
  4800
     (%1..%9 require a numeric key in the dictionary, however)
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4801
     To get a '%' character, use a '%%'-escape.
7313
9be9b35f5370 comment
Claus Gittinger <cg@exept.de>
parents: 7312
diff changeset
  4802
     To get an integer-indexed placeHolder followed by another digit,
9be9b35f5370 comment
Claus Gittinger <cg@exept.de>
parents: 7312
diff changeset
  4803
     or an index > 9, you must use %(digit).
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4804
     See also bindWith:... for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4805
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4806
    |stream|
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4807
17742
3fef0ed4c2d5 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17735
diff changeset
  4808
    stream := (TextStream ? WriteStream) on:(self species new:self size + 20).
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4809
    self expandPlaceholdersWith:argArrayOrDictionary on:stream.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4810
    ^ stream contents.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4811
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4812
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4813
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4814
     'hello %1' expandPlaceholdersWith:#('world')
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4815
     'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this')
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4816
     'hello %2; how is %1' expandPlaceholdersWith:#('world' 'this')
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4817
     '%1 plus %2 gives %3 ' expandPlaceholdersWith:#(4 5 9)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4818
     '%%(1)0 gives %(1)0' expandPlaceholdersWith:#(123)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4819
     '%%10 gives %10' expandPlaceholdersWith:#(123)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4820
     '%%(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
  4821
     '%test gives %1' expandPlaceholdersWith:#(123)
11028
cb1ee3ddd91a expandPlaceHolders: care fr Text with emphasis
Claus Gittinger <cg@exept.de>
parents: 11018
diff changeset
  4822
     'bla %1 bla' expandPlaceholdersWith:{ 'hello' allBold }
cb1ee3ddd91a expandPlaceHolders: care fr Text with emphasis
Claus Gittinger <cg@exept.de>
parents: 11018
diff changeset
  4823
     'bla %1 bla' expandPlaceholdersWith:{ 'hello' }
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4824
    "
1026
455c9f609f4d care for 16bit strings in expandPlaceHolders
Claus Gittinger <cg@exept.de>
parents: 1025
diff changeset
  4825
4410
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  4826
    "
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  4827
     |dict|
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  4828
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  4829
     dict := Dictionary new.
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  4830
     dict at:1 put:'one'.
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  4831
     dict at:$a put:'AAAAA'.
8794
a5df33935142 nindWith supports blocks in the value dictionary
Claus Gittinger <cg@exept.de>
parents: 8710
diff changeset
  4832
     dict at:$b put:[ Time now ].
17734
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  4833
     dict at:'foo' put:[ Date today ].
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  4834
     '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
  4835
    "
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  4836
2737
9f29aecea39d care for % at end in expandPlaceHolders.
Claus Gittinger <cg@exept.de>
parents: 2736
diff changeset
  4837
    "Modified: 1.7.1997 / 00:53:24 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4838
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4839
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4840
expandPlaceholdersWith:argArrayOrDictionary on:aStream
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4841
    "write the receiver to aStream, where all %i escapes are
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4842
     replaced by corresponding arguments' printStrings from the argArrayOrDictionary.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4843
     I.e. 'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this') results
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4844
     in the new string 'hello world; how is this'.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4845
     As an extension, the argument may also be a dictionary, providing
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4846
     values for symbolic keys.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4847
     In this case, %a .. %z and %(...) are also allowed.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4848
     (%1..%9 require a numeric key in the dictionary, however)
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4849
     To get a '%' character, use a '%%'-escape.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4850
     To get an integer-indexed placeHolder followed by another digit,
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4851
     or an index > 9, you must use %(digit).
10935
7142eab95639 #expandPlaceHoldersWith:in:
Stefan Vogel <sv@exept.de>
parents: 10929
diff changeset
  4852
     See also bindWith:... for VisualAge compatibility.
10939
d0ca31c1d1e9 #expandPlaceHoldersWith: handle %<cr> %<tab> etc
Stefan Vogel <sv@exept.de>
parents: 10935
diff changeset
  4853
     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
  4854
17747
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  4855
    |next v key 
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4856
     idx   "{ SmallInteger }"
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4857
     idx2  "{ SmallInteger }"
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4858
     start "{ SmallInteger }"
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4859
     stop  "{ SmallInteger }"|
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4860
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4861
    stop := self size.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4862
    start := 1.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4863
    [start <= stop] whileTrue:[
17747
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  4864
        idx := self indexOf:$% startingAt:start.
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  4865
        (idx == 0 or:[idx == stop]) ifTrue:[
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  4866
            aStream nextPutAll:self startingAt:start to:stop.
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  4867
            ^ self.
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  4868
        ].
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  4869
        "found a %"
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  4870
        aStream nextPutAll:self startingAt:start to:(idx - 1).
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  4871
        next := self at:(idx + 1).
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  4872
        (next == $%) ifTrue:[
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  4873
            aStream nextPut:$%.
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  4874
        ] ifFalse:[
17797
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4875
            next == $< ifTrue:[
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4876
                idx2 := self indexOf:$> startingAt:idx+2.
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4877
                key := self copyFrom:idx+2 to:idx2-1.
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4878
                idx := idx2 - 1.
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4879
                key := key asSymbolIfInterned.
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4880
                (#(cr tab nl return lf ff null) includesIdentical:key) ifTrue:[
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4881
                    aStream nextPut:(Character perform:key).
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4882
                ].
17747
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  4883
            ] ifFalse:[
17800
142da80d8c82 merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17797
diff changeset
  4884
                next isDigit ifTrue:[
17814
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4885
                    v := argArrayOrDictionary at:(next digitValue) ifAbsent:''
17797
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4886
                ] ifFalse:[
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4887
                    next == $( ifTrue:[
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4888
                        idx2 := self indexOf:$) startingAt:idx+2.
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4889
                        key := self copyFrom:idx+2 to:idx2-1.
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4890
                        idx := idx2 - 1.
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4891
                        (argArrayOrDictionary includesKey:key) ifTrue:[
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4892
                            v := argArrayOrDictionary at:key
17747
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  4893
                        ] ifFalse:[
17797
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4894
                            key := key asSymbolIfInterned ? key.
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4895
                            (argArrayOrDictionary includesKey:key) ifTrue:[
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4896
                                v := argArrayOrDictionary at:key
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4897
                            ] ifFalse:[
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4898
                                (key size == 1 and:[ argArrayOrDictionary includesKey:(key at:1)]) ifTrue:[
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4899
                                    v := argArrayOrDictionary at:(key at:1)
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4900
                                ] ifFalse:[
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4901
                                    key isNumeric ifTrue:[
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4902
                                        key := Integer readFrom:key onError:nil.
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4903
                                    ].
17814
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4904
                                    v := argArrayOrDictionary at:key ifAbsent:''
17797
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4905
                                ]
17747
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  4906
                            ].
17797
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4907
                        ].
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4908
                    ] ifFalse:[
17800
142da80d8c82 merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17797
diff changeset
  4909
                        (next isLetter and:[argArrayOrDictionary isSequenceable not "is a Dictionary"]) ifTrue:[
17797
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4910
                            "so next is a non-numeric single character."
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4911
                            v := argArrayOrDictionary 
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4912
                                    at:next 
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4913
                                    ifAbsent:[
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4914
                                        "try symbol instead of character"
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4915
                                        argArrayOrDictionary 
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4916
                                            at:next asSymbol 
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4917
                                            ifAbsent:[String with:$% with:next].
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4918
                                 ].
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4919
                        ] ifFalse:[
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4920
                            v := String with:$% with:next.
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4921
                        ].
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4922
                    ]
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4923
                ].
17814
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4924
                "/ v notNil ifTrue:[
17797
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4925
                    v isBlock ifTrue:[
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4926
                        v := v value
17747
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  4927
                    ].
17797
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4928
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4929
                    v printOn:aStream.
17814
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4930
                "/ ].
17797
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4931
            ]
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4932
        ].
17747
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  4933
        start := idx + 2
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4934
    ].
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4935
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4936
    "
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4937
     String streamContents:[:s|
17747
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  4938
        'hello %1' expandPlaceholdersWith:#('world') on:s.
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  4939
        s cr.
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  4940
        'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this') on:s.
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  4941
        s cr.
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  4942
        'hello %2; how is %1' expandPlaceholdersWith:#('world' 'this') on:s.
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  4943
        s cr.
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  4944
        '%1 plus %2 gives %3 ' expandPlaceholdersWith:#(4 5 9) on:s.
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  4945
        s cr.
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  4946
        '%%(1)0 gives %(1)0' expandPlaceholdersWith:#(123) on:s.
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  4947
        s cr.
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  4948
        '%%10 gives %10' expandPlaceholdersWith:#(123) on:s.
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  4949
        s cr.
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  4950
        '%%(10) gives %(10) %<cr>%<tab>next line' expandPlaceholdersWith:#(123) on:s.
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  4951
        s cr.
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  4952
        '%test gives %1' expandPlaceholdersWith:#(123) on:s.
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4953
     ]
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4954
    "
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4955
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4956
    "
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4957
     |dict|
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4958
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4959
     dict := Dictionary new.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4960
     dict at:1 put:'one'.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4961
     dict at:$a put:'AAAAA'.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4962
     dict at:$b put:[ Time now ].
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4963
     String streamContents:[:s|
17747
f978415ba3d3 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17742
diff changeset
  4964
         'hello %1 %a %b' expandPlaceholdersWith:dict on:s.
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4965
     ].
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4966
    "
17797
71451ae83564 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17780
diff changeset
  4967
17814
b75a7f0c346b Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17807
diff changeset
  4968
    "Modified: / 18-11-2010 / 15:43:28 / cg"
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4969
!
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  4970
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  4971
firstLine
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  4972
    ^ self asCollectionOfSubCollectionsSeparatedBy:Character cr do:[:line | ^ line].
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  4973
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  4974
    "
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4975
     'hello' firstLine
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4976
     '1\2\3' withCRs firstLine
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  4977
     '\1\2\3' withCRs firstLine
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  4978
    "
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  4979
!
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  4980
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4981
withCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4982
    "return a new string consisting of receivers characters
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4983
     with all \-characters replaced by cr-characters."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4984
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4985
    ^ self copyReplaceAll:$\ with:(Character cr)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4986
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4987
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4988
     'hello\world' withCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4989
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4990
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4991
    "Modified: / 18.7.1998 / 22:53:02 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4992
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4993
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4994
withEscapes
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4995
    "return a new string consisting of receivers characters
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4996
     with all \X-character escapes replaced by corresponding-characters.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4997
     (similar to the way C-language Strings are converted).
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4998
     The following escapes are supported:
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4999
	\r      return character
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5000
	\n      newline character
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5001
	\b      backspace character
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5002
	\f      formfeed character
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5003
	\t      tab character
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5004
	\e      escape character
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5005
	\\      the \ character itself
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5006
	\nnn    three digit octal number defining the characters ascii value
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5007
	\other  other
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5008
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5009
     Notice, that \' is NOT a valid escape, since the general syntax of
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5010
     string constants is not affected by this method.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5011
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5012
     Although easily implementable, this is NOT done automatically
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5013
     by the compiler (due to a lack of a language standard for this).
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5014
     However, the compiler may detect sends ot #withEscapes to string literals
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5015
     and place a modified string constant into the binary/byte-code.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5016
     Therefore, no runtime penalty will be payed for using these escapes.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5017
     (not in pre 2.11 versions)
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5018
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5019
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5020
    |sz      "{ SmallInteger }"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5021
     newSize "{ SmallInteger }"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5022
     srcIdx  "{ SmallInteger }"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5023
     dstIdx  "{ SmallInteger }"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5024
     val     "{ SmallInteger }"
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5025
     newString next hasEmphasis e|
359
claus
parents: 357
diff changeset
  5026
claus
parents: 357
diff changeset
  5027
    "
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5028
     first, count the number of escapes, to allow preallocation
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5029
     of the new string ...
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5030
     (it is faster to scan the string twice than to reallocate it multiple
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5031
      times in a WriteStream)
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5032
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5033
    sz := newSize := self size.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5034
    srcIdx := 1.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5035
    [(srcIdx := self indexOf:$\ startingAt:srcIdx) ~~ 0] whileTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5036
	srcIdx == sz ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5037
	    newSize := newSize - 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5038
	    srcIdx := srcIdx + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5039
	    next := self at:srcIdx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5040
	    next == $0 ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5041
		[srcIdx < sz and:[next isDigit]] whileTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5042
		    newSize := newSize - 1. srcIdx := srcIdx + 1. next := self at:srcIdx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5043
		]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5044
	    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5045
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5046
	srcIdx := srcIdx + 1.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5047
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5048
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5049
    newSize == sz ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5050
	^ self
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5051
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5052
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5053
    newString := self species new:newSize.
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5054
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5055
    hasEmphasis := self hasChangeOfEmphasis.
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5056
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5057
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5058
     copy over, replace escapes
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5059
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5060
    srcIdx := dstIdx := 1.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5061
    [srcIdx <= sz] whileTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5062
	next := self at:srcIdx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5063
	hasEmphasis ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5064
	    e := self emphasisAt:srcIdx
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5065
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5066
	srcIdx := srcIdx + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5067
	next == $\ ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5068
	    srcIdx <= sz ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5069
		next := self at:srcIdx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5070
		srcIdx := srcIdx + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5071
		next == $r ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5072
		    next := Character return
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5073
		] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5074
		    next == $n ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5075
			next := Character nl
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5076
		    ] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5077
			next == $b ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5078
			    next := Character backspace
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5079
			] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5080
			    next == $f ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5081
				next := Character newPage
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5082
			    ] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5083
				next == $t ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5084
				    next := Character tab
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5085
				] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5086
				    next == $e ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5087
					next := Character esc
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5088
				    ] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5089
					next == $0 ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5090
					    val := 0.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5091
					    [next notNil and:[next isDigit]] whileTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5092
						val := val * 8 + next digitValue.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5093
						srcIdx <= sz ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5094
						    next := self at:srcIdx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5095
						    srcIdx := srcIdx + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5096
						] ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5097
						    next := nil
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5098
						]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5099
					    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5100
					    next := Character value:val.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5101
					]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5102
				    ]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5103
				]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5104
			    ]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5105
			]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5106
		    ]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5107
		].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5108
	    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5109
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5110
	newString at:dstIdx put:next.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5111
	hasEmphasis ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5112
	    newString emphasisAt:dstIdx put:e
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5113
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5114
	dstIdx := dstIdx + 1.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5115
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5116
    ^ newString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5117
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5118
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5119
     'hello world' withEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5120
     'hello\world' withEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5121
     'hello\world\' withEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5122
     'hello world\' withEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5123
     'hello\tworld' withEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5124
     'hello\nworld\na\n\tnice\n\t\tstring' withEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5125
     'hello\tworld\n' withEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5126
     'hello\010world' withEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5127
     'hello\r\nworld' withEscapes
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5128
    "
1008
1bd95ea83cac add \e in #withEscapes
Claus Gittinger <cg@exept.de>
parents: 1006
diff changeset
  5129
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5130
    "Modified: 12.5.1996 / 12:53:34 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5131
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5132
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5133
withMatchEscapes
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5134
    "return a copy of the receiver with all match characters escaped
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5135
     by $\ characters (to be usable as a match string).
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5136
     Return the receiver, if there are none."
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5137
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  5138
    |in out c escape|
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  5139
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  5140
    escape := self class matchEscapeCharacter.
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5141
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5142
    in := self readStream.
7986
715c72e62d58 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7982
diff changeset
  5143
    out := WriteStream on:(self species new:self size).
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5144
    [in atEnd] whileFalse:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5145
	c := in next.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5146
	(c == escape or:['*[#' includes:c]) ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5147
	    out nextPut:$\.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5148
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5149
	out nextPut:c.
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5150
    ].
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5151
    ^ out contents.
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5152
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5153
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5154
     '*foo' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5155
     '\*foo' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5156
     '*foo' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5157
     '\\*foo' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5158
     'foo*' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5159
     'foo\*' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5160
     'foo\' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5161
     'f*o*o' withMatchEscapes
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5162
    "
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5163
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5164
    "Modified: 2.4.1997 / 18:13:04 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5165
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5166
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5167
withTabs
735
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  5168
    "return a string consisting of the receivers characters
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  5169
     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
  5170
     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
  5171
     otherwise a new string is returned.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5172
     Limitation: only the very first spaces are replaced
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5173
		 (i.e. if the receiver contains newLine characters,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5174
		  no tabs are inserted after those lineBreaks)"
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5175
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5176
    |idx   "{ SmallInteger }"
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5177
     nTabs "{ SmallInteger }"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5178
     newString|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5179
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5180
    idx := self findFirst:[:c | (c ~~ Character space)].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5181
    nTabs := (idx-1) // 8.
5815
4acdd87a77d4 // can return negative numbers.
Stefan Vogel <sv@exept.de>
parents: 5795
diff changeset
  5182
    nTabs <= 0 ifTrue:[^ self].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5183
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5184
    "any tabs"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5185
    newString := self class new:(self size - (nTabs * 7)).
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5186
    newString atAll:(1 to:nTabs) put:(Character tab).
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5187
    newString replaceFrom:(nTabs + 1) with:self startingAt:(nTabs * 8 + 1).
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5188
    ^ newString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5189
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5190
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5191
     '12345678901234567890' withTabs
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5192
     '       8901234567890' withTabs
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5193
     '        901234567890' withTabs
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5194
     '               67890' withTabs
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5195
     '                7890' withTabs
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5196
     '                 890' withTabs
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5197
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5198
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5199
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5200
withTabsExpanded
735
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  5201
    "return a string consisting of the receivers characters,
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5202
     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
  5203
     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
  5204
     otherwise a new string is returned.
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  5205
     This does handle multiline strings."
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5206
5741
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5207
    ^ self withTabsExpanded:8
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5208
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5209
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5210
     ('1' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5211
     ('12345' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5212
     ('123456' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5213
     ('1234567' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5214
     ('12345678' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5215
     ('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
  5216
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5217
     (String with:Character tab
9192
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:$1) withTabsExpanded
5741
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5220
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5221
     (String with:Character tab
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5222
	     with:$1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5223
	     with:Character tab
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5224
	     with:$2) withTabsExpanded
5741
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5225
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5226
     (String with:Character tab
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5227
	     with:$1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5228
	     with:Character cr
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5229
	     with:Character tab
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5230
	     with:$2) withTabsExpanded
5741
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5231
    "
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5232
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5233
    "Modified: 12.5.1996 / 13:05:10 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5234
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5235
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5236
withTabsExpanded:numSpaces
5741
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  5237
    "return a string consisting of the receivers characters,
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5238
     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
  5239
     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
  5240
     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
  5241
     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
  5242
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5243
    |col    "{ SmallInteger }"
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5244
     str ch
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5245
     dstIdx "{ SmallInteger }"
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5246
     newSz  "{ SmallInteger }"
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5247
     sz "{ SmallInteger }"
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5248
     hasEmphasis e|
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5249
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5250
    (self includes:(Character tab)) ifFalse:[^ self].
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5251
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5252
    sz := self size.
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5253
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5254
    "/ count the new size first, instead of
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5255
    "/ multiple resizing (better for large strings)
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5256
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5257
    col := 1. newSz := 0.
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5258
    1 to:sz do:[:srcIdx |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5259
	ch := self at:srcIdx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5260
	ch == Character tab ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5261
	    col := col + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5262
	    newSz := newSz + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5263
	    ch == Character cr ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5264
		col := 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5265
	    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5266
	] ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5267
	    (col \\ numSpaces) to:numSpaces do:[:ii |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5268
		newSz := newSz + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5269
		col := col + 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5270
	    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5271
	]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5272
    ].
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5273
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5274
    str := self species new:newSz.
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5275
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5276
    hasEmphasis := self hasChangeOfEmphasis.
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5277
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5278
    col := 1. dstIdx := 1.
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5279
    1 to:sz do:[:srcIdx |
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5280
	ch := self at:srcIdx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5281
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5282
	ch == Character tab ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5283
	    col := col + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5284
	    ch == Character cr ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5285
		col := 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5286
	    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5287
	    hasEmphasis ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5288
		e := self emphasisAt:srcIdx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5289
		str emphasisAt:dstIdx put:e
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5290
	    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5291
	    str at:dstIdx put:ch.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5292
	    dstIdx := dstIdx + 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5293
	] ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5294
	    (col \\ numSpaces) to:numSpaces do:[:ii |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5295
		str at:dstIdx put:Character space.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5296
		dstIdx := dstIdx + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5297
		col := col + 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5298
	    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5299
	]
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5300
    ].
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5301
    ^ str
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5302
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5303
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5304
     ('1' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5305
     ('1' , Character tab asString , 'x') withTabsExpanded:4
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5306
     ('12345' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5307
     ('123456' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5308
     ('1234567' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5309
     ('12345678' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5310
     ('123456789' , Character tab asString , 'x') withTabsExpanded
735
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  5311
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5312
     (String with:Character tab
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5313
	     with:Character tab
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5314
	     with:$1) withTabsExpanded
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5315
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5316
     (String with:Character tab
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5317
	     with:$1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5318
	     with:Character tab
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5319
	     with:$2) withTabsExpanded
735
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  5320
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  5321
     (String with:Character tab
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5322
	     with:$1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5323
	     with:Character cr
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5324
	     with:Character tab
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5325
	     with:$2) withTabsExpanded
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5326
    "
735
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  5327
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5328
    "Modified: 12.5.1996 / 13:05:10 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5329
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5330
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5331
withoutCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5332
    "return a new collection consisting of receivers elements
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5333
     with all cr-characters replaced by \-characters.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5334
     This is the reverse operation of withCRs."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5335
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5336
    ^ self copyReplaceAll:(Character cr) with:$\
17734
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  5337
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5338
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5339
     'hello
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5340
world' withoutCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5341
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5342
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5343
    "Modified: / 18.7.1998 / 22:53:08 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5344
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5345
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5346
withoutLeadingSeparators
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5347
    "return a copy of myself without leading separators.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5348
     Notice: this does remove tabs, newline or any other whitespace.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5349
     Returns an empty string, if the receiver consist only of whitespace."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5350
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5351
    |index|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5352
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5353
    index := self indexOfNonSeparatorStartingAt:1.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5354
    index ~~ 0 ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5355
	index == 1 ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5356
	    ^ self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5357
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5358
	^ self copyFrom:index
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5359
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5360
    ^ ''
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5361
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5362
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5363
     '    foo    ' withoutLeadingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5364
     'foo    '     withoutLeadingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5365
     '    foo'     withoutLeadingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5366
     '       '     withoutLeadingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5367
     'foo'         withoutLeadingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5368
     ('  ' , Character tab asString , ' foo   ') withoutLeadingSeparators inspect
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5369
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5370
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5371
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5372
withoutMatchEscapes
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5373
    "return a copy of the receiver with all $\ removed or
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5374
     the receiver, if there are none."
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5375
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  5376
    |in out c escape|
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  5377
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  5378
    escape := self class matchEscapeCharacter.
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5379
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5380
    in := self readStream.
8222
f2c454a9a038 replaced '' writeStream by String writeStream
Claus Gittinger <cg@exept.de>
parents: 8124
diff changeset
  5381
    out := self species writeStream.
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5382
    [in atEnd] whileFalse:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5383
	c := in next.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5384
	c == escape ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5385
	    in atEnd ifFalse:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5386
		c := in next.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5387
	    ]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5388
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5389
	out nextPut:c.
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5390
    ].
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5391
    ^ out contents.
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5392
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5393
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5394
     '*foo' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5395
     '\*foo' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5396
     '*foo' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5397
     '\\*foo' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5398
     'foo*' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5399
     'foo\*' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5400
     'foo\' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5401
     'f\*o\*o' withoutMatchEscapes
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5402
    "
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5403
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  5404
    "Modified: 30.6.1997 / 13:40:23 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5405
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5406
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5407
withoutPrefix:aString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5408
    "if the receiver startsWith aPrefix, return a copy without it.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5409
     Otherwise return the receiver"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5410
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5411
    (self startsWith:aString) ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5412
	^ self copyFrom:aString size + 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5413
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5414
    ^ self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5415
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5416
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5417
     'helloworld' withoutPrefix:'hello'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5418
     'helloworld' withoutPrefix:'foo'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5419
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5420
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5421
10671
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5422
withoutQuotes
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5423
    "remove quotes ("" and ') from the front and the end of myself"
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5424
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5425
    |result quote|
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5426
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5427
    result := self.
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5428
    ((result startsWith:$") or:[(result startsWith:$')]) ifTrue:[
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5429
	quote := result at:1.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5430
	result := result copyFrom:2.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5431
	(result endsWith:quote) ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5432
	    result := result copyWithoutLast:1
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5433
	].
10671
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5434
    ].
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5435
    ^ result
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5436
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5437
"/    '"hello"' withoutQuotes
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5438
"/    '''hello''' withoutQuotes
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5439
"/    'hello' withoutQuotes
10671
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5440
!
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  5441
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5442
withoutSeparators
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5443
    "return a copy of myself without leading and trailing whitespace.
4156
3079a5a94617 comments
Claus Gittinger <cg@exept.de>
parents: 4117
diff changeset
  5444
     (but whiteSpace in-between is preserved)
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5445
     Whitespace is space, tab, newline, formfeed.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5446
     Use withoutSpaces, if you want to remove spaces only."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5447
17734
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  5448
    ^ self trimForWhich:[:ch | ch isSeparator]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5449
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5450
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5451
     '    foo    ' withoutSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5452
     '    foo' withoutSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5453
     'foo    ' withoutSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5454
     '       ' withoutSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5455
     ('  foo' , Character tab asString , '    ') withoutSeparators inspect
17734
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  5456
     '    foo    ' asUnicode16String withoutSeparators
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5457
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5458
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5459
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5460
withoutSpaces
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5461
    "return a copy of myself without leading and trailing spaces.
4156
3079a5a94617 comments
Claus Gittinger <cg@exept.de>
parents: 4117
diff changeset
  5462
     (but spaces in-between are preserved)
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5463
     Notice: this does NOT remove tabs, newline or any other whitespace.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5464
     Use withoutSeparators for this."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5465
17734
406b1590afe8 Merged with trunk r10476
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17732
diff changeset
  5466
    ^ self trimForWhich:[:ch | ch == Character space]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5467
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5468
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5469
     '    foo    ' withoutSpaces
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5470
     'foo    '     withoutSpaces
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5471
     '    foo'     withoutSpaces
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5472
     '       '     withoutSpaces
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5473
     'a     b'     withoutSpaces
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5474
     ('  foo' , Character tab asString , '    ') withoutSpaces inspect
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5475
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5476
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5477
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5478
withoutTrailingSeparators
915
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  5479
    "return a copy of myself without trailing separators.
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  5480
     Notice: this does remove tabs, newline or any other whitespace.
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  5481
     Returns an empty string, if the receiver consist only of whitespace."
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  5482
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5483
    ^ self withoutTrailingForWhich:[:ch | ch isSeparator]
915
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  5484
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  5485
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5486
     '    foo    ' withoutTrailingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5487
     'foo    '     withoutTrailingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5488
     '    foo'     withoutTrailingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5489
     '       '     withoutTrailingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5490
     'foo'         withoutTrailingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5491
     ('  ' , Character tab asString , ' foo   ') withoutTrailingSeparators inspect
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5492
     ('   foo' , Character tab asString) withoutTrailingSeparators inspect
915
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  5493
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5494
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5495
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5496
!CharacterArray methodsFor:'substring searching'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5497
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5498
findString:subString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5499
    "find a substring. if found, return the index;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5500
     if not found, return 0."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5501
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5502
    ^ self indexOfSubCollection:subString startingAt:1 ifAbsent:0 caseSensitive:true
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5503
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5504
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5505
     'hello world' findString:'llo'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5506
     'hello world' findString:'ole'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5507
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5508
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5509
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5510
findString:subString ifAbsent:exceptionBlock
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5511
    "find a substring. If found, return the index;
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5512
     if not found, return the result of evaluating exceptionBlock."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5513
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5514
    ^ self indexOfSubCollection:subString startingAt:1 ifAbsent:exceptionBlock caseSensitive:true
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5515
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5516
11018
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5517
findString:subString ignoreCase:ignoreCase
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5518
    "find a substring. if found, return the index;
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5519
     if not found, return 0."
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5520
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5521
    ^ self indexOfSubCollection:subString startingAt:1 ifAbsent:0 caseSensitive:ignoreCase not
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5522
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5523
    "
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5524
     'hello world' findString:'LLo' ignoreCase:false
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5525
     'hello world' findString:'LLo' ignoreCase:true
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5526
    "
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5527
!
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  5528
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5529
findString:subString startingAt:index
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5530
    "find a substring, starting at index. if found, return the index;
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5531
     if not found, return 0."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5532
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5533
    ^ self indexOfSubCollection:subString startingAt:index ifAbsent:0 caseSensitive:true
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5534
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5535
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5536
     'hello yello' findString:'llo' startingAt:1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5537
     'hello yello' findString:'llo' startingAt:5
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5538
     'hello yello' findString:'llo' startingAt:15
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5539
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5540
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5541
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5542
findString:subString startingAt:index ifAbsent:exceptionBlock
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5543
    "find a substring, starting at index. if found, return the index;
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5544
     if not found, return the result of evaluating exceptionBlock."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5545
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5546
    ^ self indexOfSubCollection:subString startingAt:index ifAbsent:exceptionBlock caseSensitive:true
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5547
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5548
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5549
findString:subString startingAt:index ifAbsent:exceptionBlock caseSensitive:caseSensitive
10929
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  5550
    "find a substring, starting at index. if found, return the index;
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  5551
     if not found, return the result of evaluating exceptionBlock."
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  5552
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  5553
    ^ self indexOfSubCollection:subString startingAt:index ifAbsent:exceptionBlock caseSensitive:caseSensitive
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  5554
!
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  5555
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5556
includesString:aString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5557
    "return true, if a substring is contained in the receiver"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5558
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5559
    ^ (self indexOfSubCollection:aString startingAt:1 ifAbsent:0 caseSensitive:true) ~~ 0
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5560
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5561
    "
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5562
     'hello world' includesString:'hel'
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5563
     'hello world' includesString:'rld'
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5564
     'hello world' includesString:'llo'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5565
     'hello world' includesString:'LLO'
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5566
     'hello world' includesString:''
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5567
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5568
!
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  5569
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  5570
includesString:aString caseSensitive:caseSensitive
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5571
    "return true, if a substring is contained in the receiver"
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5572
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5573
    ^ (self indexOfSubCollection:aString startingAt:1 ifAbsent:0 caseSensitive:caseSensitive) ~~ 0
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5574
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5575
    "
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5576
     'hello world' includesString:'hel' caseSensitive:true
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5577
     'hello world' includesString:'HEL' caseSensitive:true
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5578
     'hello world' includesString:'HEL' caseSensitive:false
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5579
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5580
     'hello world' includesString:'wor' caseSensitive:true
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5581
     'hello world' includesString:'WOR' caseSensitive:true
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5582
     'hello world' includesString:'WOR' caseSensitive:false
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5583
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5584
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5585
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5586
indexOfSubCollection:subString startingAt:index ifAbsent:exceptionBlock
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5587
    "find a substring, starting at index. if found, return the index;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5588
     if not found, return the result of evaluating exceptionBlock.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5589
     This is a q&d hack - not very efficient"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5590
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5591
    ^ self indexOfSubCollection:subString startingAt:index ifAbsent:exceptionBlock caseSensitive:true.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5592
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5593
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5594
indexOfSubCollection:subString startingAt:index ifAbsent:exceptionBlock caseSensitive:caseSensitive
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5595
    "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
  5596
     if not found, return the result of evaluating exceptionBlock.
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5597
     This is a q&d hack - not very efficient"
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5598
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5599
    |firstChar found
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5600
     startIndex "{ Class: SmallInteger }"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5601
     subSize    "{ Class: SmallInteger }"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5602
     mySize     "{ Class: SmallInteger }"
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5603
     runIdx     "{ Class: SmallInteger }"
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5604
     tester|
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5605
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5606
    subSize := subString size.
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5607
    subSize == 0 ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5608
	subString isString ifFalse:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5609
	   self error:'non string argument' mayProceed:true.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5610
	].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5611
	"empty string does not match"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5612
	^ 0.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5613
	"empty string matches"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5614
	^ index
6122
a98958f1c85f handle non-string arg to indexOfSubString:
Claus Gittinger <cg@exept.de>
parents: 6119
diff changeset
  5615
    ].
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5616
    tester := caseSensitive
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5617
		ifTrue:[  [:c1 :c2 | c1 = c2 ]  ]
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5618
		ifFalse:[ [:c1 :c2 | c1 sameAs: c2 ] ].
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5619
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5620
    mySize := self size.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5621
    firstChar := subString at:1.
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5622
    caseSensitive ifTrue:[
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5623
	startIndex := self indexOf:firstChar startingAt:index.
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5624
    ] ifFalse:[
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5625
	startIndex := self findFirst:[:c | c sameAs:firstChar] startingAt:index.
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  5626
    ].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5627
    [startIndex == 0] whileFalse:[
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5628
	runIdx := startIndex.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5629
	found := true.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5630
	1 to:subSize do:[:i |
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5631
	    runIdx > mySize ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5632
		found := false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5633
	    ] ifFalse:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5634
		(tester value:(subString at:i) value:(self at:runIdx)) ifFalse:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5635
		    found := false
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5636
		]
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5637
	    ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5638
	    runIdx := runIdx + 1
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5639
	].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5640
	found ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5641
	    ^ startIndex
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5642
	].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5643
	caseSensitive ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5644
	    startIndex := self indexOf:firstChar startingAt:(startIndex + 1)
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5645
	] ifFalse:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5646
	    startIndex := self findFirst:[:c | c sameAs:firstChar] startingAt:(startIndex + 1).
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5647
	].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5648
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5649
    ^ exceptionBlock value
1005
4507487e0be6 more on encoding/decoding (still unfinished)
Claus Gittinger <cg@exept.de>
parents: 997
diff changeset
  5650
4507487e0be6 more on encoding/decoding (still unfinished)
Claus Gittinger <cg@exept.de>
parents: 997
diff changeset
  5651
    "Modified: 23.2.1996 / 15:35:15 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5652
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5653
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5654
restAfter:keyword withoutSeparators:strip
651
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5655
    "compare the left of the receiver with keyword,
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5656
     if it matches return the right.
651
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5657
     Finally, if strip is true, remove whiteSpace.
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5658
     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
  5659
	something: rest
759
908363ce8a32 interest is written with one 'r' (shame on me)
Claus Gittinger <cg@exept.de>
parents: 735
diff changeset
  5660
     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
  5661
     begins with something.
651
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5662
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5663
     You may wonder why such a specialized method exists here
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5664
     - this is so common when processing mailboxes,
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5665
     rcs files, nntp/pop3 responses, that is was considered worth
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5666
     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
  5667
     times in variuos places."
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5668
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5669
    |rest|
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5670
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5671
    (self startsWith:keyword) ifTrue:[
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5672
	rest := self copyFrom:(keyword size + 1).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5673
	strip ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5674
	    rest := rest withoutSeparators
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5675
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5676
	^ rest
651
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5677
    ].
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5678
    ^ nil
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5679
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5680
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5681
     'foo: hello world' restAfter:'foo:' withoutSeparators:true
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5682
     'funny: something' restAfter:'foo:' withoutSeparators:true
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5683
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5684
     'foo:     hello world    ' restAfter:'foo:' withoutSeparators:true
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5685
     'foo:     hello world    ' restAfter:'foo:' withoutSeparators:false
651
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5686
    "
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5687
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  5688
    "Created: 25.11.1995 / 11:04:18 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5689
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5690
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5691
!CharacterArray methodsFor:'testing'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5692
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5693
isAlphaNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5694
    "return true, if the receiver is some alphanumeric word;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5695
     i.e. consists of a letter followed by letters or digits."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5696
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5697
    self size == 0 ifTrue:[
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5698
	"mhmh what is this ?"
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5699
	^ false
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5700
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5701
    (self 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
  5702
    ^ self conform:[:char | char isLetterOrDigit].
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  5703
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  5704
    "
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5705
     'helloWorld' isAlphaNumeric
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5706
     'foo1234' isAlphaNumeric
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5707
     'f1234' isAlphaNumeric
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5708
     '1234' isAlphaNumeric
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5709
     '+' isAlphaNumeric
10093
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  5710
    "
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  5711
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  5712
    "Modified: / 13-10-2006 / 12:53:49 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5713
!
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5714
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5715
isBinarySelector
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5716
    "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
  5717
     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
  5718
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5719
    |binopChars|
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5720
17841
7abcc4aef871 Merged with trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17834
diff changeset
  5721
    (self size > Scanner maxBinarySelectorSize) ifTrue:[^ false].
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5722
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5723
    binopChars := Scanner binarySelectorCharacters.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5724
    ^ (self conform:[:char | (binopChars includes:char)])
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5725
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5726
    "
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5727
     'foo:bar:' isBinarySelector
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5728
     #foo:bar: isBinarySelector
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5729
     'hello' isBinarySelector
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5730
     '+' isBinarySelector
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5731
     '|' isBinarySelector
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5732
     '?' isBinarySelector
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5733
     ':' isBinarySelector
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5734
     'a:' isBinarySelector
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5735
     '->' isBinarySelector
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5736
     '<->' isBinarySelector
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5737
     '::' isBinarySelector
7482
e73c296fa7dc + isBinarySelector
Claus Gittinger <cg@exept.de>
parents: 7423
diff changeset
  5738
    "
e73c296fa7dc + isBinarySelector
Claus Gittinger <cg@exept.de>
parents: 7423
diff changeset
  5739
e73c296fa7dc + isBinarySelector
Claus Gittinger <cg@exept.de>
parents: 7423
diff changeset
  5740
    "Modified: 4.1.1997 / 14:16:14 / cg"
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
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5743
isBlank
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5744
    "return true, if the receiver contains spaces only"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5745
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5746
    ^ (self contains:[:char | char ~~ Character space]) not
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5747
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5748
    "
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5749
     '' isBlank
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5750
     '   a    ' isBlank
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5751
     '        ' isBlank
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5752
     '        ' asUnicode16String isBlank
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5753
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5754
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5755
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5756
isKeywordSelector
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5757
    "return true, iff there are only alphanumeric or underline characters separated by colons.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5758
     Must end with a colon."
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5759
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5760
    |state|
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5761
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5762
    state := #initial.
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5763
    self do:[:char |
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5764
	(state == #initial or:[ state == #gotColon]) ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5765
	    (char isLetter or:[ char == $_ ]) ifFalse:[^ false].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5766
	    state := #gotCharacter.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5767
	] ifFalse:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5768
	    char == $: ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5769
		state := #gotColon.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5770
	    ] ifFalse:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5771
		(char isLetterOrDigit or:[char == $_]) ifFalse:[^ false].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5772
	    ].
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5773
	].
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5774
    ].
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5775
    ^ state == #gotColon.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5776
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5777
    "
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5778
     self assert:(':' isKeywordSelector not).
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5779
     self assert:(':a' isKeywordSelector not).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5780
     self assert:('1:' isKeywordSelector not).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5781
     self assert:('a:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5782
     self assert:('_:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5783
     self assert:('_a:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5784
     self assert:('_1:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5785
     self assert:('_1::' isKeywordSelector not).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5786
     self assert:('_:_:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5787
     self assert:('a:b:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5788
     self assert:('aa:bb:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5789
     self assert:('aa:bb:a' isKeywordSelector not).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5790
     self assert:('1:2:' isKeywordSelector not).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5791
    "
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5792
!
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5793
10431
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5794
isNameSpaceSelector
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5795
    "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
  5796
     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
  5797
     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
  5798
     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
  5799
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5800
    |i|
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5801
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5802
    (self first == $:) ifFalse:[^ false].
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5803
    i := self indexOf:$: startingAt:2.
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5804
    i == 0 ifTrue:[^ false].
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5805
    self size <= (i+1) ifTrue:[^ false].
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5806
    (self at:i+1) == $: ifFalse:[^ false].
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5807
    (self at:i+2) == $: ifTrue:[^ false].
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5808
    "/ 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
  5809
    ^ true
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5810
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5811
    "test:
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5812
     self assert:('+' isNameSpaceSelector) not.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5813
     self assert:(':+' isNameSpaceSelector) not.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5814
     self assert:(':Foo:+' isNameSpaceSelector) not.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5815
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5816
     self assert:(':Foo::+' isNameSpaceSelector).
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5817
     self assert:(':Foo::bar:baz:' isNameSpaceSelector).
10431
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5818
    "
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5819
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5820
    "Created: / 05-03-2007 / 11:35:31 / cg"
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5821
!
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  5822
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5823
isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5824
    "return true, if the receiver is some numeric word;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5825
     i.e. consists only of digits."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5826
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5827
    self size == 0 ifTrue:[
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5828
	^ false
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5829
    ].
10093
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  5830
    ^ self conform:[:char | char isDigit]
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5831
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5832
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5833
     'helloWorld' isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5834
     'foo1234' isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5835
     'f1234' isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5836
     '1234' isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5837
     '+' isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5838
    "
10093
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  5839
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  5840
    "Modified: / 13-10-2006 / 12:54:12 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5841
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5842
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5843
isString
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5844
    "return true, if the receiver is some kind of string;
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5845
     true is returned here - redefinition of Object>>isString."
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5846
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5847
    ^ true
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5848
!
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5849
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5850
isUnarySelector
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5851
    "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
  5852
9471
7b1df2a2a2d7 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9425
diff changeset
  5853
    ^ (self first isLetter or:[ self first == $_ ])
9845
361f4b5d7b19 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9522
diff changeset
  5854
      and:[ self conform: [ :chr | chr isLetterOrDigit or:[chr == $_] ]]
361f4b5d7b19 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9522
diff changeset
  5855
361f4b5d7b19 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9522
diff changeset
  5856
    "Modified: / 13-09-2006 / 11:35:15 / cg"
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5857
!
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5858
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5859
isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5860
    "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
  5861
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5862
    |scanner tok|
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5863
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5864
    scanner := Compiler new.
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5865
    scanner source:(self readStream).
11630
6db5956f188f isValidSmalltalkIdentifier: return true/false (catch parseError)
Claus Gittinger <cg@exept.de>
parents: 11565
diff changeset
  5866
    Parser parseErrorSignal handle:[:ex |
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5867
	tok := nil.
11630
6db5956f188f isValidSmalltalkIdentifier: return true/false (catch parseError)
Claus Gittinger <cg@exept.de>
parents: 11565
diff changeset
  5868
    ] do:[
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5869
	tok := scanner nextToken.
11630
6db5956f188f isValidSmalltalkIdentifier: return true/false (catch parseError)
Claus Gittinger <cg@exept.de>
parents: 11565
diff changeset
  5870
    ].
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5871
    tok ~~ #Identifier ifTrue:[
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5872
	^ false
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5873
    ].
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5874
    scanner tokenPosition == 1 ifFalse:[^ false].
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5875
    ^ scanner sourceStream atEnd.
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5876
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5877
    "
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5878
     'foo' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5879
     '1foo' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5880
     '_foo' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5881
     '_foo_bar_' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5882
     'foo ' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5883
     ' foo' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5884
    "
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5885
!
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5886
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5887
numArgs
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5888
    "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
  5889
9038
d75b89570ec0 numArgs fixed (binOps can now be longer)
Claus Gittinger <cg@exept.de>
parents: 9019
diff changeset
  5890
    |binopChars|
d75b89570ec0 numArgs fixed (binOps can now be longer)
Claus Gittinger <cg@exept.de>
parents: 9019
diff changeset
  5891
d75b89570ec0 numArgs fixed (binOps can now be longer)
Claus Gittinger <cg@exept.de>
parents: 9019
diff changeset
  5892
    (self size <= Scanner maxBinarySelectorSize) ifTrue:[
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5893
	binopChars := Scanner binarySelectorCharacters.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5894
	(self conform:[:eachChar | (binopChars includes:eachChar)]) ifTrue:[
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5895
	    ^ 1
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5896
	].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5897
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5898
    ^ self occurrencesOf:$:
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5899
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5900
    "
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5901
     'foo:bar:' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5902
     #foo:bar: numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5903
     'hello' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5904
     '+' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5905
     '++' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5906
     '+++' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5907
     '|' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5908
     '?' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5909
     '_' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5910
     '_:' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5911
     '_:_:' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5912
     '<->' numArgs
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5913
    "
2051
08fd6a693ee3 ask Scanner for valid binarySelector characters in numArgs
Claus Gittinger <cg@exept.de>
parents: 1978
diff changeset
  5914
10088
b8e69093ca13 code cleanup
Claus Gittinger <cg@exept.de>
parents: 10061
diff changeset
  5915
    "Modified: / 13-10-2006 / 11:52:33 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5916
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5917
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5918
partsIfSelector
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5919
    "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
  5920
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5921
    |idx1 "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5922
     coll idx2 sz|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5923
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5924
    coll := OrderedCollection new.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5925
    idx1 := 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5926
    sz := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5927
    [true] whileTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5928
	idx2 := self indexOf:$: startingAt:idx1 + 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5929
	(idx2 == 0 or:[idx2 == sz]) ifTrue:[
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5930
	    coll add:(self copyFrom:idx1).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5931
	    ^ coll
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5932
	].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5933
	coll add:(self copyFrom:idx1 to:idx2).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5934
	idx1 := idx2 + 1
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5935
    ].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5936
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5937
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5938
     'foo:bar:' partsIfSelector
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5939
     #foo:bar: partsIfSelector
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5940
     'hello' partsIfSelector
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5941
     '+' partsIfSelector
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5942
    "
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5943
! !
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5944
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5945
!CharacterArray methodsFor:'tracing'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5946
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5947
traceInto:aRequestor level:level from:referrer
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5948
    "double dispatch into tracer, passing my type implicitely in the selector"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5949
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5950
    ^ aRequestor traceCharacterArray:self level:level from:referrer
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5951
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5952
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5953
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5954
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5955
!CharacterArray methodsFor:'visiting'!
8395
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  5956
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  5957
acceptVisitor:aVisitor with:aParameter
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  5958
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  5959
    ^ aVisitor visitString:self with:aParameter
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  5960
! !
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  5961
1849
9f35f5934ec6 added msdos-latin1 en/decoder (code = #msdos850)
Claus Gittinger <cg@exept.de>
parents: 1669
diff changeset
  5962
!CharacterArray class methodsFor:'documentation'!
629
2ceefe9b5a19 version at the end
Claus Gittinger <cg@exept.de>
parents: 608
diff changeset
  5963
2ceefe9b5a19 version at the end
Claus Gittinger <cg@exept.de>
parents: 608
diff changeset
  5964
version
17859
cc167a69671c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17851
diff changeset
  5965
    ^ '$Id: CharacterArray.st 10686 2011-09-07 16:25:40Z vranyj1 $'
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5966
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5967
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17728
diff changeset
  5968
version_CVS
17859
cc167a69671c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17851
diff changeset
  5969
    ^ '§Header: /cvs/stx/stx/libbasic/CharacterArray.st,v 1.460 2011/09/05 21:18:04 cg Exp §'
629
2ceefe9b5a19 version at the end
Claus Gittinger <cg@exept.de>
parents: 608
diff changeset
  5970
! !
6809
72fee17c14b1 utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6743
diff changeset
  5971
17846
24edc476ac18 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17845
diff changeset
  5972
CharacterArray initialize!
17847
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  5973
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
  5974
17851
09d75924b034 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
  5975
17859
cc167a69671c Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17851
diff changeset
  5976