CharacterArray.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Tue, 22 Sep 2015 16:28:42 +0100
branchjv
changeset 18759 c1217211909c
parent 18723 f7d0ff0386cf
child 18773 4f6a5cbce3a9
permissions -rw-r--r--
Changed identification strings to contain jv-branch ...to make explicit that this distribution is not the official one used by eXept and therefore that eXept is not to be blamed in case of any problem.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
17600
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
     1
"{ Encoding: utf8 }"
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
     2
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
     3
"
af7aeb79b25e Initial revision
claus
parents:
diff changeset
     4
 COPYRIGHT (c) 1994 by Claus Gittinger
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
     5
	      All Rights Reserved
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
     6
af7aeb79b25e Initial revision
claus
parents:
diff changeset
     7
 This software is furnished under a license and may be used
af7aeb79b25e Initial revision
claus
parents:
diff changeset
     8
 only in accordance with the terms of that license and with the
af7aeb79b25e Initial revision
claus
parents:
diff changeset
     9
 inclusion of the above copyright notice.   This software may not
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    10
 be provided or otherwise made available to, or used by, any
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    11
 other person.  No title to or ownership of the software is
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    12
 hereby transferred.
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    13
"
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
    14
"{ Package: 'stx:libbasic' }"
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
    15
17364
62b006f570cb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17241
diff changeset
    16
"{ NameSpace: Smalltalk }"
62b006f570cb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17241
diff changeset
    17
14137
1eb1b4a3f364 Inherit from UninterpretedBytes instead of ByteArray
Stefan Vogel <sv@exept.de>
parents: 14122
diff changeset
    18
UninterpretedBytes variableByteSubclass:#CharacterArray
17205
b266cb703584 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17192
diff changeset
    19
	instanceVariableNames:''
b266cb703584 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17192
diff changeset
    20
	classVariableNames:'PreviousMatch DecoderTables EncoderTables DecodingFailedSignal
b266cb703584 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17192
diff changeset
    21
		EncodingFailedSignal'
b266cb703584 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17192
diff changeset
    22
	poolDictionaries:''
b266cb703584 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17192
diff changeset
    23
	category:'Collections-Text'
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    24
!
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    25
1849
9f35f5934ec6 added msdos-latin1 en/decoder (code = #msdos850)
Claus Gittinger <cg@exept.de>
parents: 1669
diff changeset
    26
!CharacterArray class methodsFor:'documentation'!
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    27
82
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    28
copyright
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    29
"
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    30
 COPYRIGHT (c) 1994 by Claus Gittinger
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
    31
	      All Rights Reserved
82
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    32
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    33
 This software is furnished under a license and may be used
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    34
 only in accordance with the terms of that license and with the
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    35
 inclusion of the above copyright notice.   This software may not
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    36
 be provided or otherwise made available to, or used by, any
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    37
 other person.  No title to or ownership of the software is
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    38
 hereby transferred.
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    39
"
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    40
!
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    41
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    42
documentation
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    43
"
255
2b2c5c0facab *** empty log message ***
claus
parents: 247
diff changeset
    44
    CharacterArray is a superclass for all kinds of Strings (i.e.
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
    45
    (singleByte-)Strings, TwoByteStrings, UnicodeStrings
18318
c9687a5e7ee7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18269
diff changeset
    46
    and whatever my come in the future.
c9687a5e7ee7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18269
diff changeset
    47
c9687a5e7ee7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18269
diff changeset
    48
    This class is abstract, meaning that there are no instances of it;
c9687a5e7ee7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18269
diff changeset
    49
    concrete subclasses define how the characters are stored (i.e. either as
c9687a5e7ee7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18269
diff changeset
    50
    single byte, two-byte or four byte strings).
c9687a5e7ee7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18269
diff changeset
    51
2537
9398b135cec4 comment
Claus Gittinger <cg@exept.de>
parents: 2520
diff changeset
    52
    All this class does is provide common protocol for concrete subclasses.
1290
15ba3221b89b documentation
Claus Gittinger <cg@exept.de>
parents: 1272
diff changeset
    53
18318
c9687a5e7ee7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18269
diff changeset
    54
    Notice:
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
    55
	internally, ST/X uses a unicode encoding for ALL characters - both
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
    56
	for individual chatacter entities and for strings of characters.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
    57
	When reading/writing files in different encodings, the conversion is
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
    58
	done at read/write time by use of a CharacterEncoder instance.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
    59
	These know how to convert to a wide range of encodings.
18318
c9687a5e7ee7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18269
diff changeset
    60
c9687a5e7ee7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18269
diff changeset
    61
    Also notice:
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
    62
	UTF8 and UTF16 are external encodings of a Unicode string; they are never
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
    63
	used internally. When interacting with a UTF8 interface (OS-API or files),
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
    64
	you should convert UTF8 into the internal full Unicode right at the interface.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
    65
	Do not keep UTF8 around internally as String instances.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
    66
	The reason is that UTF8 makes it harder to manipulate strings (for example
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
    67
	to insert/extract substrings or to get its size. Of such operations would
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
    68
	require a scan of the UTF8, which would complicate them).
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
    69
	Of course, there may be rare exceptions to this, for example if a file's contents
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
    70
	is treated as raw data, and the strings have to be copied/shuffled around only,
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
    71
	without any real processing on it.
18318
c9687a5e7ee7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18269
diff changeset
    72
1290
15ba3221b89b documentation
Claus Gittinger <cg@exept.de>
parents: 1272
diff changeset
    73
    [author:]
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
    74
	Claus Gittinger
1290
15ba3221b89b documentation
Claus Gittinger <cg@exept.de>
parents: 1272
diff changeset
    75
15ba3221b89b documentation
Claus Gittinger <cg@exept.de>
parents: 1272
diff changeset
    76
    [see also:]
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
    77
	String TwoByteString Unicode16String Uniode32String
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
    78
	StringCollection
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    79
"
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    80
! !
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    81
2728
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    82
!CharacterArray class methodsFor:'initialization'!
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    83
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    84
initialize
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
    85
    DecodingFailedSignal isNil ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
    86
	DecodingFailedSignal := DecodingError.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
    87
	DecodingFailedSignal notifierString:'error during decode'.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
    88
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
    89
	EncodingFailedSignal :=EncodingError.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
    90
	EncodingFailedSignal notifierString:'error during encode'.
5440
ba9207f592c9 only init once
Claus Gittinger <cg@exept.de>
parents: 5352
diff changeset
    91
    ]
2728
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    92
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    93
    "
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    94
     CharacterArray initialize
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    95
    "
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    96
2833
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
    97
    "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
    98
! !
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    99
1849
9f35f5934ec6 added msdos-latin1 en/decoder (code = #msdos850)
Claus Gittinger <cg@exept.de>
parents: 1669
diff changeset
   100
!CharacterArray class methodsFor:'instance creation'!
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
   101
af7aeb79b25e Initial revision
claus
parents:
diff changeset
   102
basicNew
af7aeb79b25e Initial revision
claus
parents:
diff changeset
   103
    "return a new empty string"
af7aeb79b25e Initial revision
claus
parents:
diff changeset
   104
af7aeb79b25e Initial revision
claus
parents:
diff changeset
   105
    ^ self basicNew:0
af7aeb79b25e Initial revision
claus
parents:
diff changeset
   106
!
af7aeb79b25e Initial revision
claus
parents:
diff changeset
   107
2734
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   108
fromBytes:aByteCollection
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   109
    "return an instance of the receiver class,
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   110
     taking untranslated bytes from the argument, aByteCollection.
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   111
     Only useful, when reading twoByteStrings from external sources."
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   112
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   113
    |mySize nBytes newString dstIdx|
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   114
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   115
    nBytes := aByteCollection size.
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   116
    mySize := self basicNew bitsPerCharacter.
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   117
    mySize == 16 ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   118
	newString := self uninitializedNew:(nBytes // 2).
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   119
	dstIdx := 1.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   120
	aByteCollection pairWiseDo:[:hi :lo |
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   121
	    newString at:dstIdx put:(Character value:(hi bitShift:8)+lo).
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   122
	    dstIdx := dstIdx + 1
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   123
	].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   124
	^ newString.
2734
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   125
    ].
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   126
17625
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
   127
    ^ (self uninitializedNew:nBytes) replaceFrom:1 with:aByteCollection
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
   128
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
   129
    "
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   130
     Unicode16String fromBytes:#[16r02 16r20]
2734
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   131
    "
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   132
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   133
    "Modified: 30.6.1997 / 20:08:37 / cg"
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   134
!
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   135
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
   136
fromString:aString
af7aeb79b25e Initial revision
claus
parents:
diff changeset
   137
    "return a copy of the argument, aString"
af7aeb79b25e Initial revision
claus
parents:
diff changeset
   138
17625
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
   139
    ^ (self uninitializedNew:aString size) replaceFrom:1 with:aString
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
   140
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
   141
    "
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   142
	Unicode16String fromString:'hello'
17625
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
   143
    "
581
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   144
!
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
fromStringCollection:aCollectionOfStrings
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   147
    "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
   148
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   149
    ^ self fromStringCollection:aCollectionOfStrings separatedBy:''
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   150
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   151
    "
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   152
     String fromStringCollection:#('hello' 'world' 'how' 'about' 'this')
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   153
    "
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   154
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   155
    "Created: 20.11.1995 / 15:26:59 / cg"
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   156
!
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   157
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   158
fromStringCollection:aCollectionOfStrings separatedBy:aSeparatorString
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   159
    "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
   160
17625
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
   161
    |stream|
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
   162
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
   163
    aCollectionOfStrings do:[:eachString |
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   164
	stream isNil ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   165
	    stream := self writeStreamClass with:eachString.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   166
	] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   167
	    stream
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   168
		nextPutAll:aSeparatorString;
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   169
		nextPutAll:eachString.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   170
	].
581
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   171
    ].
17700
32c288b4487f class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17644
diff changeset
   172
    stream isNil ifTrue:[^ ''].
17625
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
   173
    ^ stream contents
581
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   174
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   175
    "
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   176
     String fromStringCollection:#('hello' 'world' 'how' 'about' 'this') separatedBy:' '
17625
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
   177
     String fromStringCollection:#('hello' 'world' 'how' 'about' 'this') separatedBy:'È '
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
   178
     Text fromStringCollection:{'hello'. 'world'. 'how' allBold. 'about'. 'this'. 'äöü'} separatedBy:'Ƞ'
581
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   179
    "
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   180
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   181
    "Created: 20.11.1995 / 15:32:17 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   182
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   183
5757
2511dcddce73 utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5741
diff changeset
   184
fromUTF8Bytes:aByteCollection
5758
30e0cc2213ac utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5757
diff changeset
   185
    "return a new string which represents the characters as decoded
30e0cc2213ac utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5757
diff changeset
   186
     from the utf8 encoded bytes, aByteCollection.
30e0cc2213ac utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5757
diff changeset
   187
     Returns either a normal String, or a TwoByteString instance.
6810
a055eb19e9d3 caych invalid encodings
Claus Gittinger <cg@exept.de>
parents: 6809
diff changeset
   188
     Only useful, when reading twoByteStrings from external sources.
a055eb19e9d3 caych invalid encodings
Claus Gittinger <cg@exept.de>
parents: 6809
diff changeset
   189
     This only handles up-to 16bit characters"
5757
2511dcddce73 utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5741
diff changeset
   190
7876
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   191
    ^ self decodeFromUTF8:aByteCollection.
5757
2511dcddce73 utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5741
diff changeset
   192
2511dcddce73 utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5741
diff changeset
   193
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   194
     CharacterArray fromUTF8Bytes:#[ 16r41 16r42 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   195
     CharacterArray fromUTF8Bytes:#[ 16rC1 16r02 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   196
     CharacterArray fromUTF8Bytes:#[ 16rE0 16r81 16r02 ]
6810
a055eb19e9d3 caych invalid encodings
Claus Gittinger <cg@exept.de>
parents: 6809
diff changeset
   197
     CharacterArray fromUTF8Bytes:#[ 16rEF 16rBF 16rBF ]
a055eb19e9d3 caych invalid encodings
Claus Gittinger <cg@exept.de>
parents: 6809
diff changeset
   198
a055eb19e9d3 caych invalid encodings
Claus Gittinger <cg@exept.de>
parents: 6809
diff changeset
   199
   rfc2279 examples:
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   200
     CharacterArray fromUTF8Bytes:#[ 16r41 16rE2 16r89 16rA2 16rCE 16r91 16r2E ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   201
     CharacterArray fromUTF8Bytes:#[ 16rED 16r95 16r9C 16rEA 16rB5 16rAD 16rEC 16r96 16rB4 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   202
     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
   203
a055eb19e9d3 caych invalid encodings
Claus Gittinger <cg@exept.de>
parents: 6809
diff changeset
   204
   invalid:
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   205
     CharacterArray fromUTF8Bytes:#[ 16rC0 16r80 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   206
     CharacterArray fromUTF8Bytes:#[ 16rE0 16r80 16r80 ]
5757
2511dcddce73 utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5741
diff changeset
   207
    "
2511dcddce73 utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5741
diff changeset
   208
!
2511dcddce73 utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5741
diff changeset
   209
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   210
new
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   211
    "return a new empty string"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   212
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   213
    ^ self basicNew:0
9425
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   214
!
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   215
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   216
readSmalltalkStringFrom:aStreamOrString onError:exceptionBlock
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   217
    "read & return the next String from the (character-)stream aStream;
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   218
     skipping all whitespace first; return the value of exceptionBlock,
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   219
     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
   220
     stream must be one as stored via storeOn: or storeString."
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   221
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   222
    |str collected char|
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   223
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   224
    str := aStreamOrString readStream.
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
    "skip whiteSpace"
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   227
    str skipSeparators.
11320
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
   228
14452
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   229
    (str peekOrNil == $') ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   230
	str next.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   231
	collected := self writeStream.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   232
	[str atEnd] whileFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   233
	    char := str next.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   234
	    char == $' ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   235
		"/ look for another quote
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   236
		str peekOrNil ~~ $' ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   237
		    "end of string reached"
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   238
		    ^ collected contents.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   239
		].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   240
		"eat doubled quote"
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   241
		str next.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   242
	    ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   243
	    ((char ~~ Character return) or:[str peekOrNil ~~ Character lf]) ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   244
		"compress CRLF to LF, but keep a single CR"
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   245
		collected nextPut:char.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   246
	    ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   247
	].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   248
	"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
   249
    ].
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   250
    ^ exceptionBlock value
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   251
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   252
    "
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   253
     String readFrom:('''hello world''' readStream)
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   254
     String readFrom:('''hello '''' world''' readStream)
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   255
     String readFrom:('1 ''hello'' ' readStream)
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   256
     String readFrom:('1 ''hello'' ' readStream) onError:['foobar']
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   257
    "
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   258
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   259
    "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
   260
    "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
   261
!
4bf099f5bb56 CharacterArray class>>#writeStream - answer a CharacterWriteStrem
Stefan Vogel <sv@exept.de>
parents: 11229
diff changeset
   262
13201
848ccc41fc90 added: #writeStreamClass
Claus Gittinger <cg@exept.de>
parents: 13170
diff changeset
   263
writeStreamClass
17213
1031d5018042 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17205
diff changeset
   264
    "the class used by writeStream.
1031d5018042 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17205
diff changeset
   265
     Here, we return CharacterWriteStream, which automatically changes
1031d5018042 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17205
diff changeset
   266
     the underlying collection to a multiByte string (i.e. UnicodeString).
1031d5018042 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17205
diff changeset
   267
     So you can stream wide characters into it."
13201
848ccc41fc90 added: #writeStreamClass
Claus Gittinger <cg@exept.de>
parents: 13170
diff changeset
   268
848ccc41fc90 added: #writeStreamClass
Claus Gittinger <cg@exept.de>
parents: 13170
diff changeset
   269
    ^ CharacterWriteStream
11243
4bf099f5bb56 CharacterArray class>>#writeStream - answer a CharacterWriteStrem
Stefan Vogel <sv@exept.de>
parents: 11229
diff changeset
   270
4bf099f5bb56 CharacterArray class>>#writeStream - answer a CharacterWriteStrem
Stefan Vogel <sv@exept.de>
parents: 11229
diff changeset
   271
    "
4bf099f5bb56 CharacterArray class>>#writeStream - answer a CharacterWriteStrem
Stefan Vogel <sv@exept.de>
parents: 11229
diff changeset
   272
     String writeStream
4bf099f5bb56 CharacterArray class>>#writeStream - answer a CharacterWriteStrem
Stefan Vogel <sv@exept.de>
parents: 11229
diff changeset
   273
    "
13201
848ccc41fc90 added: #writeStreamClass
Claus Gittinger <cg@exept.de>
parents: 13170
diff changeset
   274
848ccc41fc90 added: #writeStreamClass
Claus Gittinger <cg@exept.de>
parents: 13170
diff changeset
   275
    "Created: / 09-01-2011 / 10:37:57 / cg"
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
   276
! !
af7aeb79b25e Initial revision
claus
parents:
diff changeset
   277
9265
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   278
!CharacterArray class methodsFor:'Compatibility-VW'!
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   279
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   280
fromIntegerArray: anArray
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   281
    "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
   282
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   283
    | new |
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   284
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   285
    new := self new: anArray size.
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   286
    1 to: anArray size do:[:index |
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   287
	new at: index put: (anArray at: index) asCharacter
9265
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   288
    ].
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   289
    ^new
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   290
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   291
    "
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   292
     String fromIntegerArray: #[8 127]
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   293
    "
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   294
! !
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   295
2728
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   296
!CharacterArray class methodsFor:'Signal constants'!
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   297
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   298
decodingFailedSignal
2833
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   299
    "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
   300
     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
   301
     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
   302
     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
   303
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   304
    ^ DecodingFailedSignal
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   305
2833
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   306
    "Created: 28.6.1997 / 20:09:55 / cg"
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   307
    "Modified: 3.8.1997 / 18:16:47 / cg"
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   308
!
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   309
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   310
encodingFailedSignal
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   311
    "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
   312
     due to invalid characters contained in the source."
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   313
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   314
    ^ EncodingFailedSignal
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   315
2728
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   316
    "Modified: 28.6.1997 / 20:09:35 / cg"
2833
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   317
    "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
   318
! !
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   319
18721
0cbaff816be6 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18671
diff changeset
   320
1849
9f35f5934ec6 added msdos-latin1 en/decoder (code = #msdos850)
Claus Gittinger <cg@exept.de>
parents: 1669
diff changeset
   321
!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
   322
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   323
lowSpaceCleanup
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   324
    "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
   325
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   326
    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
   327
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   328
    "
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   329
     CharacterArray lowSpaceCleanup
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   330
    "
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   331
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   332
    "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
   333
    "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
   334
! !
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   335
7421
4e6c6edb90d9 category rename
Claus Gittinger <cg@exept.de>
parents: 7349
diff changeset
   336
!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
   337
7876
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   338
decodeFromUTF8:aStringOrByteCollection
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   339
    "return a string which represents the characters as decoded
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   340
     from the utf8 encoded bytes, aByteCollection.
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   341
     Returns either a normal String, or a TwoByteString instance.
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   342
     Only useful, when reading twoByteStrings from external sources.
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   343
     This only handles up-to 16bit characters."
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   344
18612
57db88d3a9fc class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18597
diff changeset
   345
    ^ CharacterEncoderImplementations::ISO10646_to_UTF8 new decodeString:aStringOrByteCollection
7876
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   346
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   347
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   348
     CharacterArray fromUTF8Bytes:#[ 16r41 16r42 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   349
     CharacterArray fromUTF8Bytes:#[ 16rC1 16r02 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   350
     CharacterArray fromUTF8Bytes:#[ 16rE0 16r81 16r02 ]
7876
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   351
     CharacterArray fromUTF8Bytes:#[ 16rEF 16rBF 16rBF ]
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   352
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   353
   rfc2279 examples:
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   354
     CharacterArray fromUTF8Bytes:#[ 16r41 16rE2 16r89 16rA2 16rCE 16r91 16r2E ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   355
     CharacterArray fromUTF8Bytes:#[ 16rED 16r95 16r9C 16rEA 16rB5 16rAD 16rEC 16r96 16rB4 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   356
     CharacterArray fromUTF8Bytes:#[ 16rE6 16r97 16rA5 16rE6 16r9C 16rAC 16rE8 16rAA 16r9E ]
7876
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   357
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   358
   invalid:
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   359
     CharacterArray fromUTF8Bytes:#[ 16rC0 16r80 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   360
     CharacterArray fromUTF8Bytes:#[ 16rE0 16r80 16r80 ]
7876
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   361
    "
443
Claus Gittinger <cg@exept.de>
parents: 428
diff changeset
   362
! !
Claus Gittinger <cg@exept.de>
parents: 428
diff changeset
   363
18721
0cbaff816be6 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18671
diff changeset
   364
1849
9f35f5934ec6 added msdos-latin1 en/decoder (code = #msdos850)
Claus Gittinger <cg@exept.de>
parents: 1669
diff changeset
   365
!CharacterArray class methodsFor:'pattern matching'!
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
   366
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
   367
matchEscapeCharacter
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
   368
    "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
   369
     (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
   370
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
   371
    ^ $\
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
   372
!
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
   373
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   374
matchScan:matchScanArray from:matchStart to:matchStop with:aString from:start to:stop caseSensitive:caseSensitive
327
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   375
    "helper for match; return true if the characters from start to stop in
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   376
     aString are matching the scan in matchScan from matchStart to matchStop.
328
claus
parents: 327
diff changeset
   377
     The matchScan is as created by asMatchScanArray.
327
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   378
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   379
     This algorithm is not at all the most efficient;
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   380
     for heavy duty pattern matching, an interface (primitive) to the regex
328
claus
parents: 327
diff changeset
   381
     pattern matching package should be added."
327
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   382
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   383
    |matchEntry
327
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   384
     mStart "{ Class: SmallInteger }"
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   385
     mStop  "{ Class: SmallInteger }"
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   386
     sStart "{ Class: SmallInteger }"
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   387
     sStop  "{ Class: SmallInteger }"
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   388
     mSize  "{ Class: SmallInteger }"
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   389
     sSize  "{ Class: SmallInteger }"
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   390
     index  "{ Class: SmallInteger }"
2561
205ee33decf9 removed unused var
Claus Gittinger <cg@exept.de>
parents: 2554
diff changeset
   391
     quickCheck matchLast nextMatchEntry
986
c3a9f590146d removed unused locals
Claus Gittinger <cg@exept.de>
parents: 915
diff changeset
   392
     checkChar included|
327
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   393
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   394
    mStart := matchStart.
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   395
    mStop := matchStop.
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   396
    sStart := start.
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   397
    sStop := stop.
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   398
16245
d16f9c7d9428 [true] whileTrue: -> #loop
Stefan Vogel <sv@exept.de>
parents: 16212
diff changeset
   399
    [
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   400
"/ Transcript showCR:('match: ''' , (aString copyFrom:sStart to:sStop) ,
3537
916534e86f0c fixed match
Claus Gittinger <cg@exept.de>
parents: 3527
diff changeset
   401
"/                    ''' against:' , (matchScanArray copyFrom:mStart to:mStop) printString).
916534e86f0c fixed match
Claus Gittinger <cg@exept.de>
parents: 3527
diff changeset
   402
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   403
	mSize := mStop - mStart + 1.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   404
	sSize := sStop - sStart + 1.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   405
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   406
	"empty strings match"
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   407
	(mSize == 0) ifTrue:[^ (sSize == 0)].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   408
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   409
	matchEntry := matchScanArray at:mStart.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   410
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   411
	"/ the most common case first:
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   412
	(sSize ~~ 0
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   413
	and:[(checkChar := (aString at:sStart)) = matchEntry]) ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   414
	    "advance by one and continue"
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   415
	    mStart := mStart + 1.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   416
	    sStart := sStart + 1
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   417
	] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   418
	    (matchEntry == #any) ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   419
		"restString empty -> no match"
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   420
		(sSize == 0) ifTrue:[^ false].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   421
		"# matches single character"
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   422
		((sSize == 1) and:[mSize == 1]) ifTrue:[^ true].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   423
		"advance by one and continue"
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   424
		mStart := mStart + 1.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   425
		sStart := sStart + 1
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   426
	    ] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   427
		(matchEntry == #anyString) ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   428
		    "* alone matches anything"
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   429
		    (mSize == 1) ifTrue:[^ true].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   430
		    "restString empty & matchString not empty -> no match"
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   431
		    (sSize == 0) ifTrue:[^ false].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   432
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   433
		    "
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   434
		     try to avoid some of the recursion by checking last
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   435
		     character and continue with shortened strings if possible
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   436
		    "
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   437
		    quickCheck := false.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   438
		    (mStop >= mStart) ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   439
			matchLast := matchScanArray at:mStop.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   440
			(matchLast ~~ #anyString) ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   441
			    (matchLast == #any) ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   442
				quickCheck := true
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   443
			    ] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   444
				matchLast == (aString at:sStop) ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   445
				    quickCheck := true
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   446
				] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   447
				    matchLast isString ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   448
					quickCheck := matchLast includes:(aString at:sStop)
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   449
				    ]
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   450
				]
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   451
			    ]
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   452
			]
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   453
		    ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   454
		    quickCheck ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   455
			"
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   456
			 quickCheck ok, advance from the right
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   457
			"
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   458
			mStop := mStop - 1.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   459
			sStop := sStop - 1
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   460
		    ] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   461
			"/ no quick check;
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   462
			"/ look for the next character(s)
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   463
			"/ and try matching there
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   464
			"/ (to avoid recursion)
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   465
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   466
			mStart < mStop ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   467
			    nextMatchEntry := matchScanArray at:mStart+1.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   468
			    nextMatchEntry isCharacter ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   469
				sStart <= sStop ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   470
				    [
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   471
					caseSensitive ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   472
					    index := aString indexOf:nextMatchEntry startingAt:sStart
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   473
					] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   474
					    index := aString findFirst:[:c | c asLowercase = nextMatchEntry asLowercase]
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   475
							     startingAt:sStart.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   476
					].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   477
					(index == 0 or:[index > sStop]) ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   478
					    ^ false
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   479
					].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   480
					(self matchScan:matchScanArray
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   481
					      from:(mStart + 1)
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   482
					      to:mStop
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   483
					      with:aString
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   484
					      from:index
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   485
					      to:sStop
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   486
					      caseSensitive:caseSensitive
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   487
					) ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   488
					    ^ true
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   489
					].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   490
					sStart := index + 1.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   491
				    ] loop.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   492
				]
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   493
			    ]
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   494
			].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   495
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   496
			"
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   497
			 no quick check possible;
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   498
			 loop over all possible substrings
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   499
			"
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   500
			index := sStart.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   501
			[index <= sStop] whileTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   502
			    (self matchScan:matchScanArray
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   503
				  from:(mStart + 1)
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   504
				  to:mStop
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   505
				  with:aString
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   506
				  from:index
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   507
				  to:sStop
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   508
				  caseSensitive:caseSensitive
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   509
			    ) ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   510
				^ true
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   511
			    ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   512
			    index := index + 1
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   513
			].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   514
			^ false
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   515
		    ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   516
		] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   517
		    (matchEntry isString) ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   518
			"testString empty -> no match"
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   519
			(sSize == 0) ifTrue:[^ false].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   520
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   521
			included := false.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   522
			"/ checkChar := aString at:sStart.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   523
			included := matchEntry includes:checkChar.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   524
			included ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   525
			    caseSensitive ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   526
				checkChar isUppercase ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   527
				    included := matchEntry includes:checkChar asLowercase.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   528
				] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   529
				    included := matchEntry includes:checkChar asUppercase.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   530
				]
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   531
			    ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   532
			].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   533
			mStart := mStart + 1.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   534
			mSize := mSize - 1.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   535
			included ifFalse:[^ false].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   536
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   537
			((sSize == 1) and:[mSize == 0]) ifTrue:[^ true].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   538
		    ] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   539
			"/ must be single character
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   540
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   541
			"testString empty ?"
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   542
			(sSize == 0) ifTrue:[^ false].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   543
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   544
			"first characters equal ?"
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   545
			"/ checkChar := aString at:sStart.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   546
			caseSensitive ifTrue:[^ false].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   547
			(checkChar asUppercase ~= matchEntry asUppercase) ifTrue:[^ false].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   548
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   549
			"advance and continue"
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   550
			mStart := mStart + 1.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   551
		    ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   552
		    "cut off 1st char and continue"
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   553
		    sStart := sStart + 1
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   554
		]
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   555
	    ]
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   556
	]
16245
d16f9c7d9428 [true] whileTrue: -> #loop
Stefan Vogel <sv@exept.de>
parents: 16212
diff changeset
   557
    ] loop.
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   558
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   559
    "
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   560
     |scanArray s|
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   561
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   562
     scanArray := self matchScanArrayFrom:'*hello'.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   563
     s := 'foo bar hello world'.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   564
     CharacterArray
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   565
	 matchScan:scanArray
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   566
	 from:1
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   567
	 to:scanArray size
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   568
	 with:s
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   569
	 from:1
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   570
	 to:s size
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   571
	 caseSensitive:true
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   572
    "
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   573
    "
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   574
     |scanArray s|
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   575
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   576
     scanArray := self matchScanArrayFrom:'*hello*'.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   577
     s := 'foo bar hello world'.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   578
     CharacterArray
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   579
	 matchScan:scanArray
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   580
	 from:1
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   581
	 to:scanArray size
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   582
	 with:s
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   583
	 from:1
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   584
	 to:s size
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   585
	 caseSensitive:true
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   586
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   587
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   588
    "Modified: / 24-07-2011 / 07:17:03 / cg"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   589
    "Modified (comment): / 24-07-2011 / 08:55:14 / cg"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   590
!
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   591
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   592
matchScan:matchScanArray from:matchStart to:matchStop with:aString from:start to:stop ignoreCase:ignoreCase
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   593
    <resource: #obsolete>
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   594
    "helper for match; return true if the characters from start to stop in
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   595
     aString are matching the scan in matchScan from matchStart to matchStop.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   596
     The matchScan is as created by asMatchScanArray.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   597
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   598
     This algorithm is not at all the most efficient;
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   599
     for heavy duty pattern matching, an interface (primitive) to the regex
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   600
     pattern matching package should be added."
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   601
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   602
    ^ self
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   603
	matchScan:matchScanArray from:matchStart to:matchStop with:aString from:start to:stop caseSensitive:ignoreCase not
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   604
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   605
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   606
     |scanArray s|
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   607
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   608
     scanArray := self matchScanArrayFrom:'*hello'.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   609
     s := 'foo bar hello world'.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   610
     CharacterArray
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   611
	 matchScan:scanArray
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   612
	 from:1
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   613
	 to:scanArray size
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   614
	 with:s
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   615
	 from:1
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   616
	 to:s size
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   617
	 ignoreCase:false
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   618
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   619
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   620
     |scanArray s|
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   621
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   622
     scanArray := self matchScanArrayFrom:'*hello*'.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   623
     s := 'foo bar hello world'.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   624
     CharacterArray
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   625
	 matchScan:scanArray
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   626
	 from:1
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   627
	 to:scanArray size
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   628
	 with:s
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   629
	 from:1
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   630
	 to:s size
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   631
	 ignoreCase:false
13520
52597f7f6ff8 changed:
Claus Gittinger <cg@exept.de>
parents: 13511
diff changeset
   632
    "
52597f7f6ff8 changed:
Claus Gittinger <cg@exept.de>
parents: 13511
diff changeset
   633
52597f7f6ff8 changed:
Claus Gittinger <cg@exept.de>
parents: 13511
diff changeset
   634
    "Modified: / 24-07-2011 / 07:17:03 / cg"
52597f7f6ff8 changed:
Claus Gittinger <cg@exept.de>
parents: 13511
diff changeset
   635
    "Modified (comment): / 24-07-2011 / 08:55:14 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   636
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   637
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   638
matchScanArrayFrom:aString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   639
    "scan a pattern string and decompose it into a scanArray.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   640
     This is processed faster (especially with character ranges), and
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   641
     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
   642
9282
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   643
    ^ self matchScanArrayFrom:aString escapeCharacter:(self matchEscapeCharacter)
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   644
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   645
    "
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   646
     String matchScanArrayFrom:'*ute*'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   647
     String matchScanArrayFrom:'**ute**'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   648
     String matchScanArrayFrom:'*uter'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   649
     String matchScanArrayFrom:'\*uter'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   650
     String matchScanArrayFrom:'[cC]#mpute[rR]'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   651
     String matchScanArrayFrom:'[abcd]*'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   652
     String matchScanArrayFrom:'[a-k]*'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   653
     String matchScanArrayFrom:'*some*compl*ern*'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   654
     String matchScanArrayFrom:'[a-'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   655
     String matchScanArrayFrom:'[a-zA-Z]'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   656
     String matchScanArrayFrom:'[a-z01234A-Z]'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   657
    "
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   658
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   659
    "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
   660
!
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   661
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   662
matchScanArrayFrom:aString escapeCharacter:escape
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   663
    "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
   664
     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
   665
     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
   666
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   667
    |coll
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   668
     idx "{ Class: SmallInteger }"
9282
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   669
     end c1 c2 matchSet previous|
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
   670
5487
cb4c5ae75c63 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5469
diff changeset
   671
    previous := nil.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   672
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   673
    coll := OrderedCollection new.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   674
    idx := 1. end := aString size.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   675
    [idx <= end] whileTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   676
	|char this|
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   677
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   678
	char := aString at:idx.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   679
	char == $* ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   680
	    previous ~~ #anyString ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   681
		this := #anyString
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   682
	    ]
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   683
	] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   684
	    char == $# ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   685
		previous ~~ #anyString ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   686
		    this := #any
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   687
		]
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   688
	    ] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   689
		char == $[ ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   690
		    matchSet := IdentitySet new.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   691
		    idx := idx + 1.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   692
		    idx > end ifTrue:[^ nil].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   693
		    char := aString at:idx.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   694
		    c1 := nil.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   695
		    [char ~~ $]] whileTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   696
			((char == $-) and:[c1 notNil]) ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   697
			    idx := idx + 1.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   698
			    idx > end ifTrue:[^ nil].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   699
			    c2 := aString at:idx.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   700
			    c1 to:c2 do:[:c | matchSet add:c].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   701
			    c1 := nil.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   702
			    idx := idx + 1.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   703
			] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   704
			    (char ~~ $]) ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   705
				matchSet add:char.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   706
				c1 := char.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   707
				idx := idx + 1
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   708
			    ]
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   709
			].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   710
			idx > end ifTrue:[^ nil].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   711
			char := aString at:idx
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   712
		    ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   713
		    this := matchSet asString
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   714
		] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   715
		    char == escape ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   716
			idx := idx + 1.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   717
			idx > end ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   718
			    "/ mhmh - what should we do here ?
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   719
			    this := char
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   720
			] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   721
			    this := aString at:idx.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   722
			]
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   723
		    ] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   724
			this := char
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   725
		    ]
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   726
		]
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   727
	    ]
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   728
	].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   729
	this notNil ifTrue:[coll add:this. previous := this].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   730
	idx := idx + 1
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   731
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   732
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   733
    ^ coll asArray
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   734
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   735
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   736
     String matchScanArrayFrom:'*ute*'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   737
     String matchScanArrayFrom:'**ute**'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   738
     String matchScanArrayFrom:'*uter'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   739
     String matchScanArrayFrom:'\*uter'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   740
     String matchScanArrayFrom:'[cC]#mpute[rR]'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   741
     String matchScanArrayFrom:'[abcd]*'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   742
     String matchScanArrayFrom:'[a-k]*'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   743
     String matchScanArrayFrom:'*some*compl*ern*'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   744
     String matchScanArrayFrom:'[a-'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   745
     String matchScanArrayFrom:'[a-zA-Z]'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   746
     String matchScanArrayFrom:'[a-z01234A-Z]'
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   747
    "
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   748
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   749
    "Modified: 2.4.1997 / 16:20:29 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   750
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   751
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   752
!CharacterArray class methodsFor:'queries'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   753
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   754
isAbstract
11229
4fa83d5e806d comment
Claus Gittinger <cg@exept.de>
parents: 11179
diff changeset
   755
    "Return if this class is an abstract class.
4fa83d5e806d comment
Claus Gittinger <cg@exept.de>
parents: 11179
diff changeset
   756
     True is returned for CharacterArray here; false for subclasses.
4fa83d5e806d comment
Claus Gittinger <cg@exept.de>
parents: 11179
diff changeset
   757
     Abstract subclasses must redefine again."
4fa83d5e806d comment
Claus Gittinger <cg@exept.de>
parents: 11179
diff changeset
   758
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   759
    ^ self == CharacterArray
18597
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
   760
!
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
   761
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
   762
speciesForCharacterSize:characterSize
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
   763
    "answer the class, that is able to hold characters of size characterSize"
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
   764
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
   765
    characterSize <= 8 ifTrue:[^ String].
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
   766
    characterSize <= 16 ifTrue:[^ Unicode16String].
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
   767
    ^ Unicode32String
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
18721
0cbaff816be6 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18671
diff changeset
   770
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   771
!CharacterArray methodsFor:'Compatibility-ANSI'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   772
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   773
addLineDelimiters
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   774
    "Ansi compatibility - same as withCRs"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   775
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   776
    ^ self withCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   777
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   778
    "Modified: / 13.11.2001 / 19:16:25 / cg"
17543
bb01d670ad82 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17517
diff changeset
   779
! !
bb01d670ad82 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17517
diff changeset
   780
bb01d670ad82 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17517
diff changeset
   781
!CharacterArray methodsFor:'Compatibility-Dolphin'!
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   782
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   783
copyExpanding:expandTable
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   784
    "return a copy of myself, with translations from the expandTable sliced in.
18392
c79a9b3a9ba4 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18391
diff changeset
   785
     The argument is supposed to map from characters to either characters or strings.
c79a9b3a9ba4 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18391
diff changeset
   786
     Added for Dolphin compatibility"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   787
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   788
    |ds|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   789
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   790
    ds := WriteStream on:(self species new).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   791
    self do:[:eachChar |
18392
c79a9b3a9ba4 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18391
diff changeset
   792
        |repl|
c79a9b3a9ba4 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18391
diff changeset
   793
c79a9b3a9ba4 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18391
diff changeset
   794
        repl := expandTable at:eachChar ifAbsent:[nil].
c79a9b3a9ba4 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18391
diff changeset
   795
        repl isNil ifTrue:[
c79a9b3a9ba4 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18391
diff changeset
   796
            ds nextPut:eachChar
c79a9b3a9ba4 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18391
diff changeset
   797
        ] ifFalse:[
c79a9b3a9ba4 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18391
diff changeset
   798
            repl size == 0 ifTrue:[
c79a9b3a9ba4 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18391
diff changeset
   799
                ds nextPut:repl
c79a9b3a9ba4 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18391
diff changeset
   800
            ] ifFalse:[
c79a9b3a9ba4 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18391
diff changeset
   801
                ds nextPutAll:repl
c79a9b3a9ba4 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18391
diff changeset
   802
            ]
c79a9b3a9ba4 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18391
diff changeset
   803
        ].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   804
    ].
6870
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   805
    ^ ds contents.
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   806
!
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   807
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   808
formatWith:aString
11955
1230c6953d49 comments
Claus Gittinger <cg@exept.de>
parents: 11919
diff changeset
   809
    "Compatibility method - do not use in new code.
18392
c79a9b3a9ba4 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18391
diff changeset
   810
     same as #bindWith: for Dolphin compatibility"
6870
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   811
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   812
    ^ self bindWith:aString
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   813
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   814
    "
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   815
     'hello%1world' formatWith:'123'
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   816
    "
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   817
!
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   818
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   819
formatWith:arg1 with:arg2
11955
1230c6953d49 comments
Claus Gittinger <cg@exept.de>
parents: 11919
diff changeset
   820
    "Compatibility method - do not use in new code.
18392
c79a9b3a9ba4 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18391
diff changeset
   821
     same as #bindWith: for Dolphin compatibility"
6870
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   822
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   823
    ^ self bindWith:arg1 with:arg2
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   824
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   825
    "
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   826
     'hello%1 %2world' formatWith:'123' with:234
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   827
    "
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   828
!
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   829
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   830
formatWith:arg1 with:arg2 with:arg3
11955
1230c6953d49 comments
Claus Gittinger <cg@exept.de>
parents: 11919
diff changeset
   831
    "Compatibility method - do not use in new code.
18392
c79a9b3a9ba4 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18391
diff changeset
   832
     same as #bindWith: for Dolphin compatibility"
6870
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   833
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   834
    ^ self bindWith:arg1 with:arg2 with:arg3
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   835
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   836
    "
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   837
     'hello%1 %2 %3world' formatWith:'123' with:234 with:345
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   838
    "
6391
ff9f6df9ec4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6228
diff changeset
   839
! !
ff9f6df9ec4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6228
diff changeset
   840
14681
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   841
!CharacterArray methodsFor:'Compatibility-GNU'!
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   842
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   843
% anArrayOfOperands
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   844
    "return a copy of the receiver, where a '%i' escape
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   845
     is replaced by the coresponding string from the argument array.
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   846
     'i' may be between 1 and 9 (i.e. a maximum of 9 placeholders is allowed).
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   847
     Added for GNU-ST compatibility."
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   848
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   849
    ^ self expandPlaceholdersWith:anArrayOfOperands
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   850
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   851
    "
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   852
     'do you prefer %1 or rather %2 (not talking about %3) ?'
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   853
	% #('smalltalk' 'c++' 'c')
14681
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   854
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   855
     'do you %(what) ?'
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   856
	% (Dictionary new at:#'what' put:'understand'; yourself)
14681
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   857
    "
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   858
! !
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   859
7261
f35fc9cee675 method category rename
Claus Gittinger <cg@exept.de>
parents: 7247
diff changeset
   860
!CharacterArray methodsFor:'Compatibility-ST/V'!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   861
17517
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
   862
asArrayOfSubstrings
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
   863
    "return an array of substrings from the receiver, interpreting
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
   864
     separators (i.e. spaces & newlines) as word-delimiters.
18390
ecfcd8d7d5ed class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18350
diff changeset
   865
     This has been added for ST/V compatibility
ecfcd8d7d5ed class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18350
diff changeset
   866
     - the actual work is done in asCollectionOfWords.
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   867
     (sigh: it is called #'subStrings' in V'Age, #'substrings' in Squeak
17517
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
   868
     and #'asCollectionOfWords' in ST/X) "
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
   869
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
   870
    ^ self asCollectionOfWords asArray
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
   871
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
   872
    "
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
   873
     '1 one two three four 5 five' asArrayOfSubstrings
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
   874
     '1
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
   875
one
18390
ecfcd8d7d5ed class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18350
diff changeset
   876
        two three four 5 five' asArrayOfSubstrings
17517
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
   877
    "
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
   878
!
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
   879
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   880
byteAt:index put:aByte
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   881
    "store a byte at given index.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   882
     This is an ST/V compatibility method."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   883
1333
d3fdca956f0d allow storing of 0-bytes (be careful with printing then ...)
Claus Gittinger <cg@exept.de>
parents: 1312
diff changeset
   884
"/    (aByte == 0) ifTrue:[
d3fdca956f0d allow storing of 0-bytes (be careful with printing then ...)
Claus Gittinger <cg@exept.de>
parents: 1312
diff changeset
   885
"/        "store a space instead"
d3fdca956f0d allow storing of 0-bytes (be careful with printing then ...)
Claus Gittinger <cg@exept.de>
parents: 1312
diff changeset
   886
"/        ^ 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
   887
"/    ].
11754
5132248cfd6e common definition of #byteAt:put between CharacterArray and Symbol
Stefan Vogel <sv@exept.de>
parents: 11632
diff changeset
   888
    ^ self basicAt:index put:(Character value:aByte)
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   889
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   890
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   891
     'hello' copy at:1 put:$H asciiValue; yourself
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   892
     'hello' copy byteAt:1 put:72; yourself
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   893
     'hello' copy byteAt:1 put:0; yourself
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   894
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   895
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   896
    "Modified: 6.5.1996 / 10:35:26 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   897
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   898
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   899
replChar:oldChar with:newChar
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   900
    "return a copy of the receiver, with all oldChars replaced
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   901
     by newChar.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   902
     This is an ST/V compatibility method."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   903
3656
347ea0413b68 use #copyReplaceAll:with:
Claus Gittinger <cg@exept.de>
parents: 3630
diff changeset
   904
    ^ self copyReplaceAll:oldChar with:newChar
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   905
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   906
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   907
     '12345678901234567890' replChar:$0 with:$*
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   908
    "
3656
347ea0413b68 use #copyReplaceAll:with:
Claus Gittinger <cg@exept.de>
parents: 3630
diff changeset
   909
347ea0413b68 use #copyReplaceAll:with:
Claus Gittinger <cg@exept.de>
parents: 3630
diff changeset
   910
    "Modified: / 18.7.1998 / 22:52:57 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   911
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   912
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   913
replChar:oldChar withString:newString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   914
    "return a copy of the receiver, with all oldChars replaced
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   915
     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
   916
     This is an ST/V compatibility method."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   917
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   918
    |tmpStream|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   919
15523
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
   920
    tmpStream := self species writeStream.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   921
    self do:[:element |
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   922
	element = oldChar ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   923
	    tmpStream nextPutAll:newString
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   924
	] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   925
	    tmpStream nextPut:element
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
   926
	].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   927
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   928
    ^ tmpStream contents
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   929
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   930
   "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   931
     '12345678901234567890' replChar:$0 withString:'foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   932
     'a string with spaces' replChar:$  withString:' foo '
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   933
    "
9192
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
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   936
replString:subString withString:newString
4244
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   937
    "return a copy of the receiver, with all sequences of subString replaced
18390
ecfcd8d7d5ed class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18350
diff changeset
   938
     by newString (i.e. slice in the newString in place of the oldString).
ecfcd8d7d5ed class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18350
diff changeset
   939
     This is an ST/V compatibility method."
4244
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   940
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
   941
    ^ self copyReplaceString:subString withString:newString
4244
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   942
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   943
   "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   944
     '12345678901234567890' replString:'123' withString:'OneTwoThree'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   945
     '12345678901234567890' replString:'123' withString:'*'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   946
     '12345678901234567890' replString:'234' withString:'foo'
4244
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   947
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   948
     ('a string with spaces' replChar:$  withString:' foo ')
18390
ecfcd8d7d5ed class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18350
diff changeset
   949
        replString:'foo' withString:'bar'
4244
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   950
    "
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   951
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
   952
    "Modified: / 12-05-2004 / 12:00:27 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   953
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   954
9275
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   955
subString:start to:end
18390
ecfcd8d7d5ed class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18350
diff changeset
   956
    "same as copyFrom:to:
ecfcd8d7d5ed class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18350
diff changeset
   957
     This is an ST/V compatibility method."
ecfcd8d7d5ed class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18350
diff changeset
   958
9275
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   959
    ^ self copyFrom:start to:end
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   960
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   961
   "
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   962
     '12345678901234567890' subString:3 to:8
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   963
    "
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   964
!
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   965
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   966
trimBlanks
14992
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
   967
    "return a copy of the receiver without leading and trailing spaces.
18464
6b4a8707ff96 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18463
diff changeset
   968
     This is an ST/V compatibility method and an alias for withoutSpaces."
9192
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
    ^ self withoutSpaces
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
     '    spaces at beginning' trimBlanks
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   974
     'spaces at end    ' trimBlanks
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   975
     '    spaces at beginning and end     ' trimBlanks
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   976
     'no spaces' trimBlanks
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   977
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   978
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   979
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   980
!CharacterArray methodsFor:'Compatibility-Squeak'!
4409
86e049b21f8d added #includesSubstring:caseSensitive:
Claus Gittinger <cg@exept.de>
parents: 4389
diff changeset
   981
6148
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   982
asDate
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   983
    "Many allowed forms, see Date.readFrom:"
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   984
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   985
    ^ Date readFrom: (ReadStream on: self)
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   986
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   987
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   988
     '30 Apr 1999' asDate dayName capitalized
6148
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   989
    "
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   990
!
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   991
16051
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
   992
asOneByteString
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
   993
    "return the receiver converted to a 'normal' string.
18391
9241055f7c0d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18390
diff changeset
   994
     Same as asSingleByteString - for Squeak/Pharo compatibility."
16051
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
   995
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
   996
    ^ self asSingleByteString
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
   997
!
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
   998
8971
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
   999
asUrl
18391
9241055f7c0d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18390
diff changeset
  1000
    "Same as asURL - for Squeak/Pharo compatibility."
9241055f7c0d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18390
diff changeset
  1001
8971
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
  1002
    ^ self asURL
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
  1003
!
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
  1004
10840
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
  1005
asWideString
18391
9241055f7c0d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18390
diff changeset
  1006
    "return a two-byte string containing the same characters as the receiver.
9241055f7c0d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18390
diff changeset
  1007
     Same as asTwoByteString - for Squeak/Pharo compatibility."
14405
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  1008
10840
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
  1009
    ^ self asTwoByteString
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
  1010
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
  1011
    "
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
  1012
     'abc' asWideString
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
  1013
    "
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
  1014
!
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
  1015
4989
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
  1016
capitalized
18391
9241055f7c0d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18390
diff changeset
  1017
    "same as asUppercaseFirst for Squeak/Pharo compatibility"
14405
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  1018
4989
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
  1019
    ^ self asUppercaseFirst
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
  1020
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
  1021
    "
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
  1022
     'hello' capitalized
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
  1023
    "
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
  1024
!
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
  1025
10841
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1026
caseInsensitiveLessOrEqual:aString
18391
9241055f7c0d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18390
diff changeset
  1027
    "compare the receiver against the argument ignoring case differences
9241055f7c0d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18390
diff changeset
  1028
     For Squeak/Pharo compatibility"
9241055f7c0d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18390
diff changeset
  1029
10841
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1030
    ^ (self compareCaselessWith:aString) <= 0
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1031
!
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1032
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1033
caseSensitiveLessOrEqual:aString
18391
9241055f7c0d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18390
diff changeset
  1034
    "compare the receiver against the argument caring for case differences
9241055f7c0d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18390
diff changeset
  1035
     For Squeak/Pharo compatibility"
9241055f7c0d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18390
diff changeset
  1036
10841
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1037
    ^ self <= aString
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1038
!
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1039
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1040
charactersExactlyMatching:aString
14405
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  1041
    "return the number of characters I share as a prefix with the argument, aString"
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  1042
10841
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1043
    |idx nMax|
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1044
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1045
    nMax :=(self size) min:(aString size).
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1046
    idx := 1.
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1047
    [idx <= nMax] whileTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1048
	(self at:idx) = (aString at:idx) ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1049
	    ^ idx - 1
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1050
	].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1051
	idx := idx + 1.
10841
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1052
    ].
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1053
    ^ nMax
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1054
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1055
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1056
     'abc' charactersExactlyMatching:'abc'
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1057
     'abc' charactersExactlyMatching:'abcd'
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1058
     'abcd' charactersExactlyMatching:'abc'
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1059
     'abc' charactersExactlyMatching:'abd'
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1060
     'abc' charactersExactlyMatching:'xxx'
10841
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1061
    "
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1062
!
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1063
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1064
endsWithDigit
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1065
    "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
  1066
18391
9241055f7c0d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18390
diff changeset
  1067
    |len|
9241055f7c0d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18390
diff changeset
  1068
9241055f7c0d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18390
diff changeset
  1069
    ^ (len := self size) > 0 and: [(self at:len) isDigit]
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1070
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1071
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  1072
findDelimiters:delimiters startingAt:start
18391
9241055f7c0d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18390
diff changeset
  1073
    "Answer the index of the character within the receiver, starting at start, 
9241055f7c0d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18390
diff changeset
  1074
     that matches one of the delimiters. 
9241055f7c0d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18390
diff changeset
  1075
     If the receiver does not contain any of the delimiters, answer size + 1."
9192
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
    |idx|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1078
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1079
    idx := self indexOfAny:delimiters startingAt:start.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1080
    idx == 0 ifTrue:[^ self size + 1].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1081
    ^ idx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1082
"/start to: self size do: [:i |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1083
"/        |char|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1084
"/
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1085
"/        char := self at: i.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1086
"/        delimiters do: [:delim | delim = char ifTrue: [^ i]]
8971
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
  1087
"/    ].
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
  1088
"/    ^ self size + 1
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
  1089
!
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
  1090
13624
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
  1091
findTokens:delimiterOrDelimiters
7270
37248a67718a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7265
diff changeset
  1092
    "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
  1093
13624
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
  1094
    delimiterOrDelimiters size == 0 ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1095
	^ self asCollectionOfSubstringsSeparatedBy:delimiterOrDelimiters
13624
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
  1096
    ] ifFalse:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1097
	^ self asCollectionOfSubstringsSeparatedByAny:delimiterOrDelimiters
13624
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
  1098
    ].
7270
37248a67718a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7265
diff changeset
  1099
37248a67718a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7265
diff changeset
  1100
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1101
     'a|b#c||e' findTokens:#($# $|)
13624
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
  1102
     'a|b#c||e' findTokens:$|
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
  1103
    "
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
  1104
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
  1105
    "Modified: / 04-09-2011 / 20:31:21 / cg"
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
  1106
    "Modified (comment): / 05-09-2011 / 04:25:28 / cg"
4981
2ee8cd2c4c8e squeak compatibility
ps
parents: 4974
diff changeset
  1107
!
2ee8cd2c4c8e squeak compatibility
ps
parents: 4974
diff changeset
  1108
4974
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
  1109
includesSubString:aString
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
  1110
    "return true, if a substring is contained in the receiver.
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
  1111
     The compare is case sensitive."
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
  1112
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
  1113
    ^ self includesString:aString
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
  1114
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
  1115
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1116
     'hello world' includesSubString:'Hel'
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1117
     'hello world' includesSubString:'hel'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1118
     'hello world' includesSubString:'llo'
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
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1121
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1122
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1123
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1124
11178
668d5d9a4d5d added #includesSubString:caseSensitive:
sr
parents: 11062
diff changeset
  1125
includesSubString:aString caseSensitive:caseSensitive
18391
9241055f7c0d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18390
diff changeset
  1126
    "sigh - an alias; added for Squeak/Pharo compatibility"
9241055f7c0d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18390
diff changeset
  1127
11179
178086a92325 *** empty log message ***
sr
parents: 11178
diff changeset
  1128
    ^ self includesSubstring:aString caseSensitive:caseSensitive
11178
668d5d9a4d5d added #includesSubString:caseSensitive:
sr
parents: 11062
diff changeset
  1129
!
668d5d9a4d5d added #includesSubString:caseSensitive:
sr
parents: 11062
diff changeset
  1130
16875
32e61bb3a742 class: CharacterArray>>#includesSubstring: (for Squeak compatibility)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16863
diff changeset
  1131
includesSubstring: aString
18391
9241055f7c0d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18390
diff changeset
  1132
    "sigh - an alias; added for Squeak/Pharo compatibility"
9241055f7c0d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18390
diff changeset
  1133
16875
32e61bb3a742 class: CharacterArray>>#includesSubstring: (for Squeak compatibility)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16863
diff changeset
  1134
    ^ self includesSubString: aString
32e61bb3a742 class: CharacterArray>>#includesSubstring: (for Squeak compatibility)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16863
diff changeset
  1135
32e61bb3a742 class: CharacterArray>>#includesSubstring: (for Squeak compatibility)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16863
diff changeset
  1136
    "Created: / 03-10-2014 / 02:47:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
32e61bb3a742 class: CharacterArray>>#includesSubstring: (for Squeak compatibility)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16863
diff changeset
  1137
!
32e61bb3a742 class: CharacterArray>>#includesSubstring: (for Squeak compatibility)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16863
diff changeset
  1138
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1139
includesSubstring:aString caseSensitive:caseSensitive
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1140
    "return true, if a substring is contained in the receiver.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1141
     The argument, caseSensitive controls if case is ignored in the compare."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1142
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1143
    "/ for now,  a q&d hack ...
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1144
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1145
    caseSensitive ifFalse:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1146
	^ self asLowercase includesString:aString asLowercase
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1147
    ].
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1148
    ^ self includesString:aString
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1149
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1150
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1151
     'hello world' includesSubstring:'Hel' caseSensitive:true
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1152
     'hello world' includesSubstring:'Hel' caseSensitive:false
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1153
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1154
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1155
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1156
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1157
!
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1158
6979
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1159
isAllDigits
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1160
    "Answer whether the receiver's characters are all digits"
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1161
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1162
    ^ self conform:[:eachChar | eachChar isDigit]
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1163
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1164
    "
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1165
     'hello world' isAllDigits
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1166
     '12344' isAllDigits
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1167
    "
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1168
!
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1169
4890
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1170
lastSpacePosition
18391
9241055f7c0d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18390
diff changeset
  1171
    "return the index of the last space character; 0 if there is none.
9241055f7c0d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18390
diff changeset
  1172
     Added for Squeak/Pharo compatibility"
14405
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  1173
4890
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1174
    ^ self lastIndexOfSeparator
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1175
!
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1176
7022
0c3c73f83b7f padded:to:with: - for squeak
penk
parents: 7020
diff changeset
  1177
padded:leftOrRight to:paddedSize with:padCharacter
14053
acbb97913c30 comment/format in: #padded:to:with:
Claus Gittinger <cg@exept.de>
parents: 14050
diff changeset
  1178
    "pad left (leftOrRight==#left) or right"
acbb97913c30 comment/format in: #padded:to:with:
Claus Gittinger <cg@exept.de>
parents: 14050
diff changeset
  1179
7022
0c3c73f83b7f padded:to:with: - for squeak
penk
parents: 7020
diff changeset
  1180
    leftOrRight == #left ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1181
	^ self leftPaddedTo:paddedSize with:padCharacter
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1182
    ].
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1183
    ^ self paddedTo:paddedSize with:padCharacter
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1184
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1185
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1186
     'hello' padded:#right to:10 with:$.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1187
     'hello' padded:#left to:10 with:$.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1188
    "
14053
acbb97913c30 comment/format in: #padded:to:with:
Claus Gittinger <cg@exept.de>
parents: 14050
diff changeset
  1189
acbb97913c30 comment/format in: #padded:to:with:
Claus Gittinger <cg@exept.de>
parents: 14050
diff changeset
  1190
    "Modified (comment): / 07-03-2012 / 16:31:33 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1191
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1193
skipDelimiters:delimiters startingAt:start
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1194
    "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
  1195
     that does NOT match one of the delimiters.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1196
     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
  1197
     Assumes the delimiters to be a non-empty string."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1198
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1199
    start to:self size do:[:i |
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1200
	delimiters detect:[:delim | delim = (self at:i) ] ifNone:[ ^ i ]
9192
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
    ^ self size + 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1203
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1204
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1205
     '123***7890' skipDelimiters:'*' startingAt:4
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1206
     '123***7890' skipDelimiters:'*' startingAt:3
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1207
     '123***7890' skipDelimiters:'*' startingAt:10
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1208
     '123*******' skipDelimiters:'*' startingAt:10
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1209
    "
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1210
!
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1211
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1212
substrings
17517
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
  1213
    "return an array consisting of all words contained in the receiver.
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
  1214
     Words are separated by whitespace.
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
  1215
     This has been added for Squeak compatibility.
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
  1216
     (sigh: it is called #'subStrings' in V'Age, and #'asCollectionOfWords' in ST/X) "
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
  1217
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1218
    ^ self asCollectionOfWords
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1219
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1220
    "
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1221
     'foo bar baz' substrings
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1222
    "
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1223
!
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1224
12665
b027fc5aec4e added: #substringsSeparatedBy:
Claus Gittinger <cg@exept.de>
parents: 12664
diff changeset
  1225
substringsSeparatedBy:separatorCharacter
18391
9241055f7c0d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18390
diff changeset
  1226
    "Added for Squeak/Pharo compatibility"
9241055f7c0d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18390
diff changeset
  1227
12665
b027fc5aec4e added: #substringsSeparatedBy:
Claus Gittinger <cg@exept.de>
parents: 12664
diff changeset
  1228
    ^ self asCollectionOfSubstringsSeparatedBy:separatorCharacter
b027fc5aec4e added: #substringsSeparatedBy:
Claus Gittinger <cg@exept.de>
parents: 12664
diff changeset
  1229
b027fc5aec4e added: #substringsSeparatedBy:
Claus Gittinger <cg@exept.de>
parents: 12664
diff changeset
  1230
    "
b027fc5aec4e added: #substringsSeparatedBy:
Claus Gittinger <cg@exept.de>
parents: 12664
diff changeset
  1231
     'foo bar, baz' substringsSeparatedBy:$,
b027fc5aec4e added: #substringsSeparatedBy:
Claus Gittinger <cg@exept.de>
parents: 12664
diff changeset
  1232
    "
b027fc5aec4e added: #substringsSeparatedBy:
Claus Gittinger <cg@exept.de>
parents: 12664
diff changeset
  1233
!
b027fc5aec4e added: #substringsSeparatedBy:
Claus Gittinger <cg@exept.de>
parents: 12664
diff changeset
  1234
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1235
truncateTo:smallSize
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1236
    "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
  1237
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1238
    self size <= smallSize ifTrue:[^ self].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1239
    ^ self copyFrom: 1 to: smallSize
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1240
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1241
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1242
     'hello world' truncateTo:5
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1243
     'hello' truncateTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1244
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1245
     'hello world' copyTo:5
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1246
     'hello' copyTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1247
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1248
!
5795
d67a8ff4d98e added #truncateTo:
Claus Gittinger <cg@exept.de>
parents: 5794
diff changeset
  1249
4890
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1250
withBlanksTrimmed
18464
6b4a8707ff96 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18463
diff changeset
  1251
    "Return a copy of the receiver from which leading and trailing whitespace have been trimmed.
6b4a8707ff96 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18463
diff changeset
  1252
     Notice the bad naming - it is trimming separators, not just blanks.
6b4a8707ff96 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18463
diff changeset
  1253
     Added for Squeak compatibility and an alias for withoutSeparators"
4890
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1254
14865
8d6cc362aff7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14768
diff changeset
  1255
    ^ self withoutSeparators "withoutSpaces"    "/ cg: it seems that squeak cares for any whitespace
4890
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1256
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1257
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1258
     '  hello    world    ' withBlanksTrimmed
4890
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1259
    "
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1260
!
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1261
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1262
withNoLineLongerThan: aNumber
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1263
    "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
  1264
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1265
    | listOfLines currentLast currentStart resultString putativeLast putativeLine crPosition |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1266
14451
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1267
    (aNumber isNumber not or:[ aNumber < 1] ) ifTrue: [self error: 'too narrow'].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1268
    listOfLines _ OrderedCollection new.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1269
    currentLast _ 0.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1270
    [currentLast < self size] whileTrue:
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1271
	    [currentStart _ currentLast + 1.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1272
	    putativeLast _ (currentStart + aNumber - 1) min: self size.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1273
	    putativeLine _ self copyFrom: currentStart to: putativeLast.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1274
	    (crPosition _ putativeLine indexOf: Character cr) > 0 ifTrue:
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1275
		    [putativeLast _ currentStart + crPosition - 1.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1276
		    putativeLine _ self copyFrom: currentStart to: putativeLast].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1277
	    currentLast _ putativeLast == self size
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1278
		    ifTrue:
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1279
			    [putativeLast]
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1280
		    ifFalse:
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1281
			    [currentStart + putativeLine lastSpacePosition - 1].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1282
	    currentLast <= currentStart ifTrue:
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1283
		    ["line has NO spaces; baleout!!"
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1284
		    currentLast _ putativeLast].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1285
	    listOfLines add: (self copyFrom: currentStart to: currentLast) withBlanksTrimmed].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1286
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1287
    listOfLines size > 0 ifFalse: [^ ''].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1288
    resultString _ listOfLines first.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1289
    2 to: listOfLines size do:
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1290
	    [:i | resultString _ resultString, Character cr asString, (listOfLines at: i)].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1291
    ^ resultString
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
     #(5 7 20) collect:
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1295
	[:i | 'Fred the bear went down to the brook to read his book in silence' withNoLineLongerThan: i]
14451
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1296
    "
10883
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1297
!
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1298
12343
0a93eee37d65 added: #withSqueakLineEndings
Claus Gittinger <cg@exept.de>
parents: 12330
diff changeset
  1299
withSqueakLineEndings
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1300
    "assume the string is textual, and that CR, LF, and CRLF are all
18391
9241055f7c0d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18390
diff changeset
  1301
     valid line endings.  Replace each occurence with a single CR"
12343
0a93eee37d65 added: #withSqueakLineEndings
Claus Gittinger <cg@exept.de>
parents: 12330
diff changeset
  1302
0a93eee37d65 added: #withSqueakLineEndings
Claus Gittinger <cg@exept.de>
parents: 12330
diff changeset
  1303
    ^ self asStringCollection asStringWith:Character cr.
0a93eee37d65 added: #withSqueakLineEndings
Claus Gittinger <cg@exept.de>
parents: 12330
diff changeset
  1304
!
0a93eee37d65 added: #withSqueakLineEndings
Claus Gittinger <cg@exept.de>
parents: 12330
diff changeset
  1305
12188
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1306
withoutLeading: char
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1307
    "return a copy of myself without leading a char.
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1308
     Returns an empty string, if the receiver consist only of a char."
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1309
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1310
    ^ self withoutLeadingForWhich:[:ch | ch = char]
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1311
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1312
    "
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1313
     '****foo****' withoutLeading: $*
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1314
     'foo****'     withoutLeading: $*
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1315
     '*'           withoutLeading: $*
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1316
     ''            withoutLeading: $*
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1317
     '****foo'     withoutLeading: $*
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1318
     '*******'     withoutLeading: $*
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1319
     'foo'         withoutLeading: $*
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1320
     'f***o***o'   withoutLeading: $*
12188
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1321
     ('**' , Character tab asString , '*foo***') withoutLeading: $* inspect
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1322
    "
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1323
!
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1324
11565
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1325
withoutTrailing:char
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1326
    "return a copy of myself without trailing char.
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1327
     Returns an empty string, if the receiver consist only of char."
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1328
12188
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1329
    ^ self withoutTrailingForWhich:[:ch | ch = char]
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1330
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1331
    "
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1332
     '    foo....' withoutTrailing:$.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1333
     'foo....'     withoutTrailing:$.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1334
     '    foo'     withoutTrailing:$.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1335
     '.......'     withoutTrailing:$.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1336
     'foo'         withoutTrailing:$.
11565
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1337
    "
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1338
! !
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1339
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1340
!CharacterArray methodsFor:'Compatibility-V''Age'!
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1341
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1342
addLineDelimiter
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1343
    "replace all '\'-characters by line delimiter (cr) - characters.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1344
     This has been added for VisualAge compatibility."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1345
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1346
    ^ self withCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1347
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1348
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1349
bindWith:aString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1350
    "return a copy of the receiver, where a '%1' escape is
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1351
     replaced by aString.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1352
     This has been added for VisualAge compatibility."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1353
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1354
    ^ self expandPlaceholdersWith:(Array with:aString)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1355
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1356
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1357
     'do you like %1 ?' bindWith:'smalltalk'
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
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1360
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1361
bindWith:string1 with:string2
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1362
    "return a copy of the receiver, where a '%1' escape is
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1363
     replaced by string1 and '%2' is replaced by string2.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1364
     This has been added for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1365
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1366
    ^ self expandPlaceholdersWith:(Array with:string1 with:string2)
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1367
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1368
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1369
     'do you prefer %1 or rather %2 ?'
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1370
	bindWith:'smalltalk' with:'c++'
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1371
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1372
!
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1373
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1374
bindWith:str1 with:str2 with:str3
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1375
    "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
  1376
     are replaced by str1, str2 and str3 respectively.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1377
     This has been added for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1378
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1379
    ^ self expandPlaceholdersWith:(Array with:str1 with:str2 with:str3)
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1380
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1381
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1382
     'do you prefer %1 or rather %2 (not talking about %3) ?'
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1383
	bindWith:'smalltalk' with:'c++' with:'c'
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1384
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1385
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1386
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1387
bindWith:str1 with:str2 with:str3 with:str4
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1388
    "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
  1389
     are replaced by str1, str2, str3 and str4 respectively.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1390
     This has been added for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1391
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1392
    ^ self expandPlaceholdersWith:(Array with:str1 with:str2 with:str3 with:str4)
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1393
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1394
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1395
     'do you prefer %1 or rather %2 (not talking about %3 or even %4) ?'
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1396
	bindWith:'smalltalk' with:'c++' with:'c' with:'assembler'
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1397
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1398
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1399
2344
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1400
bindWith:str1 with:str2 with:str3 with:str4 with:str5
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1401
    "return a copy of the receiver, where a '%1' .. '%5' escapes
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1402
     are replaced by str1 .. str5 respectively.
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1403
     This has been added for VisualAge compatibility."
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1404
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1405
    ^ 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
  1406
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1407
    "Created: 31.1.1997 / 16:25:42 / cg"
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1408
!
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1409
5343
bac9bc59a698 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5342
diff changeset
  1410
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
  1411
    "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
  1412
     are replaced by str1 .. str6 respectively.
5343
bac9bc59a698 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5342
diff changeset
  1413
     This has been added for VisualAge compatibility."
bac9bc59a698 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5342
diff changeset
  1414
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1415
    ^ self expandPlaceholdersWith:(Array with:str1 with:str2
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1416
					 with:str3 with:str4
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1417
					 with:str5 with:str6)
11524
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1418
!
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1419
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1420
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
  1421
    "return a copy of the receiver, where a '%1' .. '%7' escapes
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1422
     are replaced by str1 .. str7 respectively.
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1423
     This has been added for VisualAge compatibility."
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1424
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1425
    ^ self expandPlaceholdersWith:(Array with:str1 with:str2
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1426
					 with:str3 with:str4
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1427
					 with:str5 with:str6
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1428
					 with:str7)
5343
bac9bc59a698 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5342
diff changeset
  1429
!
bac9bc59a698 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5342
diff changeset
  1430
13996
a86faa4f17b8 added: #bindWith:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13987
diff changeset
  1431
bindWith:str1 with:str2 with:str3 with:str4 with:str5 with:str6 with:str7 with:str8
a86faa4f17b8 added: #bindWith:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13987
diff changeset
  1432
    "return a copy of the receiver, where a '%1' .. '%8' escapes
a86faa4f17b8 added: #bindWith:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13987
diff changeset
  1433
     are replaced by str1 .. str8 respectively.
a86faa4f17b8 added: #bindWith:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13987
diff changeset
  1434
     This has been added for VisualAge compatibility."
a86faa4f17b8 added: #bindWith:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13987
diff changeset
  1435
a86faa4f17b8 added: #bindWith:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13987
diff changeset
  1436
    ^ self expandPlaceholdersWith:(Array with:str1 with:str2
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1437
					 with:str3 with:str4
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1438
					 with:str5 with:str6
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1439
					 with:str7 with:str8)
13996
a86faa4f17b8 added: #bindWith:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13987
diff changeset
  1440
a86faa4f17b8 added: #bindWith:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13987
diff changeset
  1441
    "Created: / 06-02-2012 / 10:33:18 / cg"
a86faa4f17b8 added: #bindWith:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13987
diff changeset
  1442
!
a86faa4f17b8 added: #bindWith:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13987
diff changeset
  1443
14014
3aff2d7c41c8 added: #bindWith:with:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13996
diff changeset
  1444
bindWith:str1 with:str2 with:str3 with:str4 with:str5 with:str6 with:str7 with:str8 with:str9
3aff2d7c41c8 added: #bindWith:with:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13996
diff changeset
  1445
    "return a copy of the receiver, where a '%1' .. '%9' escapes
3aff2d7c41c8 added: #bindWith:with:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13996
diff changeset
  1446
     are replaced by str1 .. str9 respectively.
3aff2d7c41c8 added: #bindWith:with:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13996
diff changeset
  1447
     This has been added for VisualAge compatibility."
3aff2d7c41c8 added: #bindWith:with:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13996
diff changeset
  1448
3aff2d7c41c8 added: #bindWith:with:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13996
diff changeset
  1449
    ^ self expandPlaceholdersWith:(Array with:str1 with:str2
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1450
					 with:str3 with:str4
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1451
					 with:str5 with:str6
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1452
					 with:str7 with:str8
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1453
					 with:str9)
14014
3aff2d7c41c8 added: #bindWith:with:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13996
diff changeset
  1454
3aff2d7c41c8 added: #bindWith:with:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13996
diff changeset
  1455
    "Created: / 14-02-2012 / 17:42:31 / cg"
3aff2d7c41c8 added: #bindWith:with:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13996
diff changeset
  1456
!
3aff2d7c41c8 added: #bindWith:with:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13996
diff changeset
  1457
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1458
bindWithArguments:anArrayOfStrings
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1459
    "return a copy of the receiver, where a '%i' escape
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1460
     is replaced by the coresponding string from the argument array.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1461
     '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
  1462
     This has been added for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1463
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1464
    ^ self expandPlaceholdersWith:anArrayOfStrings
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1465
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1466
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1467
     'do you prefer %1 or rather %2 (not talking about %3) ?'
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1468
	bindWithArguments:#('smalltalk' 'c++' 'c')
12196
5718ecf81f37 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 12188
diff changeset
  1469
5718ecf81f37 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 12188
diff changeset
  1470
     'do you %(what) ?'
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1471
	bindWithArguments:(Dictionary new at:#'what' put:'understand'; yourself)
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1472
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1473
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1474
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1475
subStrings
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1476
    "return an array consisting of all words contained in the receiver.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1477
     Words are separated by whitespace.
17517
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
  1478
     This has been added for VisualAge compatibility.
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
  1479
     (sigh: it is called #'subbtrings' in Squeak, and #'asCollectionOfWords' in ST/X) "
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1480
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1481
    ^ self asCollectionOfWords
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1482
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1483
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1484
     'hello world, this is smalltalk' subStrings
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1485
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1486
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1487
16181
14e0c2a81b72 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16175
diff changeset
  1488
subStrings:separatorCharacterOrString
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1489
    "return an array consisting of all words contained in the receiver.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1490
     Words are separated by separatorCharacter.
17233
2e3faa540679 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17215
diff changeset
  1491
     This is similar to split: and has been added for VisualAge compatibility."
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1492
16181
14e0c2a81b72 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16175
diff changeset
  1493
    separatorCharacterOrString isCharacter ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1494
	^ self asCollectionOfSubstringsSeparatedBy:separatorCharacterOrString
16181
14e0c2a81b72 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16175
diff changeset
  1495
    ].
14e0c2a81b72 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16175
diff changeset
  1496
    ^ self asCollectionOfSubstringsSeparatedByAny:separatorCharacterOrString
14e0c2a81b72 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16175
diff changeset
  1497
14e0c2a81b72 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16175
diff changeset
  1498
    "
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1499
     'foo:bar:baz:smalltalk' subStrings:$:
16181
14e0c2a81b72 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16175
diff changeset
  1500
     'foo:bar:baz:smalltalk' subStrings:':'
14e0c2a81b72 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16175
diff changeset
  1501
     'foo.bar,baz-smalltalk' subStrings:'.,-'
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1502
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1503
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1504
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1505
trimSeparators
18392
c79a9b3a9ba4 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18391
diff changeset
  1506
    "return a copy of the receiver without leading and trailing whiteSpace.
18464
6b4a8707ff96 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18463
diff changeset
  1507
     Added for VisualAge compatibility and an alias for withoutSeparators"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1508
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1509
    ^ self withoutSeparators
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1510
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1511
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1512
!CharacterArray methodsFor:'Compatibility-VW'!
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1513
6139
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1514
asLogicalFileSpecification
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1515
    ^ self asFilename
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1516
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1517
    "Created: / 30.10.2001 / 17:29:53 / cg"
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1518
!
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1519
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1520
expandMacros
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1521
    "ST80 compatibility - expand '<..>' macros with
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1522
     argument strings. Similar to #bindWith:.
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1523
     Read the comment in #expandMacrosWithArguments: about
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1524
     limited compatibility issues."
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1525
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1526
    ^ self expandMacrosWithArguments:#()
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1527
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1528
    "
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1529
     'hello<n>foo' expandMacros
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1530
    "
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1531
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1532
    "Modified: / 18.6.1998 / 16:03:02 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1533
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1534
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1535
expandMacrosWith:arg
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1536
    "ST80 compatibility - expand '<..>' macros with
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1537
     argument strings. Similar to #bindWith:.
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1538
     Read the comment in #expandMacrosWithArguments: about
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1539
     limited compatibility issues."
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1540
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1541
    ^ self expandMacrosWithArguments:(Array with:arg)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1542
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1543
    "Created: / 1.11.1997 / 13:01:28 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1544
    "Modified: / 1.11.1997 / 13:30:50 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1545
!
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1546
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1547
expandMacrosWith:arg1 with:arg2
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1548
    "ST80 compatibility - expand '<..>' macros with
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1549
     argument strings. Similar to #bindWith:.
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1550
     Read the comment in #expandMacrosWithArguments: about
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1551
     limited compatibility issues."
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1552
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1553
    ^ self expandMacrosWithArguments:(Array with:arg1 with:arg2)
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1554
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1555
    "Modified: / 6.7.1998 / 21:58:14 / cg"
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1556
!
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1557
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1558
expandMacrosWith:arg1 with:arg2 with:arg3
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1559
    "ST80 compatibility - expand '<..>' macros with
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1560
     argument strings. Similar to #bindWith:.
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1561
     Read the comment in #expandMacrosWithArguments: about
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1562
     limited compatibility issues."
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1563
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1564
    ^ self expandMacrosWithArguments:(Array with:arg1 with:arg2 with:arg3)
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1565
!
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1566
10353
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1567
expandMacrosWith:arg1 with:arg2 with:arg3 with:arg4
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1568
    "ST80 compatibility - expand '<..>' macros with
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1569
     argument strings. Similar to #bindWith:.
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1570
     Read the comment in #expandMacrosWithArguments: about
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1571
     limited compatibility issues."
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1572
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1573
    ^ 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
  1574
!
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1575
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1576
expandMacrosWithArguments:argArray
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1577
    "ST80 compatibility - expand '<..>' macros with
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1578
     argument strings. Similar to #bindWith:.
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1579
     WARNING: possibly not all ST80 expansions are supported here."
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1580
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1581
    "/ supported expansions:
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1582
    "/
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1583
    "/   <#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
  1584
    "/   <#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
  1585
    "/   <#?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
  1586
    "/              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
  1587
    "/   <n>        replace by a newLine character
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1588
    "/   <t>        replace by a tab character
6834
eba4b58b8692 fixed expandMacros (%-escape)
Claus Gittinger <cg@exept.de>
parents: 6810
diff changeset
  1589
    "/   %X         the X character itself
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1590
8999
f3fda66ea51e #expandMacrosWithArguments: - be mor friendly to xml strings.
Stefan Vogel <sv@exept.de>
parents: 8971
diff changeset
  1591
    |in out c fmt nr arg s1 s2 peekc|
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1592
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1593
    in := self readStream.
10721
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1594
    out := CharacterWriteStream on:(self species uninitializedNew:self size).
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1595
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1596
    [in atEnd] whileFalse:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1597
	c := in next.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1598
	c == $% ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1599
	    c := in next.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1600
	    out nextPut:c
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1601
	] ifFalse:[c ~~ $< ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1602
	    out nextPut:c.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1603
	] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1604
	    peekc := in peek.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1605
	    [peekc == $<] whileTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1606
		out nextPut:$<.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1607
		peekc := in nextPeek.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1608
	    ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1609
	    peekc == $n ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1610
		peekc := in nextPeek.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1611
		peekc == $> ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1612
		    in next.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1613
		    out cr.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1614
		] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1615
		    out nextPutAll:'<n'.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1616
		]
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1617
	    ] ifFalse:[peekc == $t ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1618
		peekc := in nextPeek.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1619
		peekc == $> ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1620
		    in next.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1621
		    out tab.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1622
		] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1623
		    out nextPutAll:'<t'.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1624
		]
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1625
	    ] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1626
		peekc isDigit ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1627
		    "start an argument expansion ..."
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1628
		    nr := Integer readFrom:in onError:nil.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1629
		    nr isNil ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1630
			"this cannot happen (there is at least one digit)"
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1631
			self error:'invalid format' mayProceed:true.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1632
			^ self
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1633
		    ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1634
		    fmt := in next.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1635
		    (fmt ~~ $? and:[in peek ~~ $>]) ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1636
			out nextPut:$<.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1637
			nr printOn:out.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1638
			out nextPut:fmt.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1639
		    ] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1640
			(nr between:1 and:argArray size) ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1641
			    arg := argArray at:nr.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1642
			] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1643
			    arg := ''
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1644
			].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1645
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1646
			fmt == $p ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1647
			    "expand with args printString"
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1648
			    arg printOn:out.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1649
			] ifFalse:[fmt == $s ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1650
			    "expand with arg itself"
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1651
			    arg isText ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1652
				out contentsSpecies isText ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1653
				    out := (TextStream ? CharacterWriteStream on:Text new) nextPutAll:out contents; yourself.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1654
				].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1655
				out nextPutAll:arg.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1656
			    ] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1657
				out nextPutAll:arg asString string.  "see method comment: arg must know #asString"
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1658
			    ]
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1659
			] ifFalse:[fmt == $? ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1660
			    s1 := in upTo:$:.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1661
			    s2 := in nextUpTo:$>.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1662
			    arg == true ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1663
				out nextPutAll:s1
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1664
			    ] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1665
				out nextPutAll:s2
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1666
			    ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1667
			] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1668
			    "what does VW do here ?"
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1669
			    self error:'invalid format' mayProceed:true.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1670
			    ^ self
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1671
			]]].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1672
			c := in next.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1673
			c ~~ $> ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1674
			    "what does VW do here ?"
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1675
			    self error:'invalid format' mayProceed:true.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1676
			    ^ self
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1677
			]
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1678
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1679
		    ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1680
		] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1681
		    out nextPut:$<.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1682
		].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1683
	    ]].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1684
	]].
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1685
    ].
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1686
    ^ out contents
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1687
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1688
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1689
     'hello <1s> how are you' expandMacrosWith:(OperatingSystem getLoginName)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1690
     'one plus one is <1p>' expandMacrosWith:2
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1691
    "
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1692
10721
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1693
    "Modified: / 18-09-2007 / 22:50:43 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1694
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1695
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1696
isCharacters
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1697
    "added for visual works compatibility"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1698
    ^ true
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1699
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1700
16295
54510929f67c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16245
diff changeset
  1701
!CharacterArray methodsFor:'JavaScript support'!
54510929f67c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16245
diff changeset
  1702
54510929f67c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16245
diff changeset
  1703
unquote
17000
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  1704
    "removes double quotes from the receiver.
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  1705
     This is the JavaSccript standard unquote function."
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  1706
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  1707
    |mySize|
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  1708
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  1709
    (mySize := self size) >= 2 ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1710
	((self first == $") and:[self last == $"]) ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1711
	    ^ self copyFrom:2 to:mySize-1
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1712
	].
16295
54510929f67c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16245
diff changeset
  1713
    ].
54510929f67c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16245
diff changeset
  1714
    ^ self
54510929f67c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16245
diff changeset
  1715
54510929f67c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16245
diff changeset
  1716
    "
17000
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  1717
     'hello' quote unquote
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  1718
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1719
     JavaScriptParser evaluate:'''hello''.quote.unquote'
16295
54510929f67c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16245
diff changeset
  1720
    "
54510929f67c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16245
diff changeset
  1721
! !
13510
150d12670b9f comment/format
Claus Gittinger <cg@exept.de>
parents: 13504
diff changeset
  1722
16175
05de577feb25 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16051
diff changeset
  1723
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1724
!CharacterArray methodsFor:'character searching'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1725
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1726
includesMatchCharacters
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  1727
    "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
  1728
     for match operations; false if not.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1729
     Here, do not care for $\ escapes"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1730
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1731
    ^ self includesAny:'*#['
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1732
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1733
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1734
     '*foo' includesMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1735
     '\*foo' includesMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1736
     '\*foo' includesUnescapedMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1737
     '*foo' includesMatchCharacters
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1738
     '\\*foo' includesMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1739
     'foo*' includesMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1740
     'foo\*' includesMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1741
     'foo\' includesMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1742
    "
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1743
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1744
    "Modified: 2.4.1997 / 18:12:34 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1745
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1746
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1747
includesSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1748
    "return true, if the receiver contains any whitespace characters"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1749
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1750
    ^ (self indexOfSeparator ~~ 0)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1751
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1752
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1753
     'hello world' includesSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1754
     'helloworld' includesSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1755
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1756
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1757
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1758
includesUnescapedMatchCharacters
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1759
    "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
  1760
     for match operations; false if not.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1761
     Here, care for $\ escapes"
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1762
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  1763
    |idx sz specialChars escape|
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1764
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1765
    idx := 1.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1766
    sz := self size.
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  1767
    specialChars := '*#[\'.
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  1768
    (escape := self class matchEscapeCharacter) ~~ $\ ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1769
	specialChars := specialChars copy.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1770
	specialChars at:specialChars size put:escape
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  1771
    ].
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  1772
16245
d16f9c7d9428 [true] whileTrue: -> #loop
Stefan Vogel <sv@exept.de>
parents: 16212
diff changeset
  1773
    [
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1774
	idx := self indexOfAny:specialChars startingAt:idx.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1775
	idx == 0 ifTrue:[^ false].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1776
	(self at:idx) == escape ifFalse:[^ true].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1777
	idx := idx + 2.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1778
	idx > sz ifTrue:[^ false].
16245
d16f9c7d9428 [true] whileTrue: -> #loop
Stefan Vogel <sv@exept.de>
parents: 16212
diff changeset
  1779
    ] loop.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1780
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1781
    "
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1782
     '*foo' includesUnescapedMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1783
     '\*foo' includesUnescapedMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1784
     '\\foo' includesUnescapedMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1785
     '\\\$foo' includesUnescapedMatchCharacters
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1786
     '*foo' includesUnescapedMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1787
     '\\*foo' includesUnescapedMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1788
     'foo*' includesUnescapedMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1789
     'foo\*' includesUnescapedMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1790
     'foo\' includesUnescapedMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1791
    "
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1792
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1793
    "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
  1794
    "Created: 2.4.1997 / 17:23:26 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1795
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1796
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1797
indexOfControlCharacterStartingAt:startIndex
3668
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1798
    "return the index of the next control character;
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1799
     that is a character with asciiValue < 32.
15605
99acf495a3cf class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15540
diff changeset
  1800
     Start the search at startIndex, searching forward.
3668
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1801
     Return 0 if none is found."
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1802
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1803
    |start  "{ Class: SmallInteger }"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1804
     mySize "{ Class: SmallInteger }"|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1805
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1806
    start := startIndex.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1807
    mySize := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1808
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1809
    start to:mySize do:[:index |
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1810
	(self at:index) isControlCharacter ifTrue:[^ index]
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1811
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1812
    ^ 0
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1813
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1814
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1815
     'hello world' asTwoByteString            indexOfControlCharacterStartingAt:1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1816
     'hello world\foo' withCRsasTwoByteString indexOfControlCharacterStartingAt:1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1817
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1818
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1819
    "Modified: / 21.7.1998 / 17:25:07 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1820
!
3668
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1821
8541
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1822
indexOfNonSeparator
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1823
    "return the index of the first non-whitespace character.
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1824
     return 0 if no non-separator was found"
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1825
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1826
    ^ self indexOfNonSeparatorStartingAt:1.
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1827
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1828
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1829
     '    hello world' indexOfNonSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1830
     '    ' indexOfNonSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1831
     'a   ' indexOfNonSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1832
     'abc' indexOfNonSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1833
     ' ' indexOfNonSeparator
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1834
     '' indexOfNonSeparator
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
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1838
indexOfNonSeparatorStartingAt:startIndex
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1839
    "return the index of the next non-whitespace character,
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1840
     starting the search at startIndex, searching forward;
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1841
     return 0 if no non-separator was found"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1842
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1843
    |start  "{ Class: SmallInteger }"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1844
     mySize "{ Class: SmallInteger }"|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1845
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1846
    start := startIndex.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1847
    mySize := self size.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1848
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1849
    start to:mySize do:[:index |
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1850
	(self at:index) isSeparator ifFalse:[^ index]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1851
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1852
    ^ 0
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
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1855
     '    hello world' indexOfNonSeparatorStartingAt:1
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1856
     '    ' indexOfNonSeparatorStartingAt:1
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1857
     'a   ' indexOfNonSeparatorStartingAt:2
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1858
    "
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1859
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1860
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1861
     |s index1 index2|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1862
     s := '   foo    bar      baz'.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1863
     index1 := s indexOfNonSeparatorStartingAt:1.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1864
     index2 := s indexOfSeparatorStartingAt:index1.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1865
     s copyFrom:index1 to:index2 - 1
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
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1868
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1869
indexOfSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1870
    "return the index of the first whitespace character;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1871
     starting the search at the beginning, searching forward;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1872
     return 0 if no separator was found"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1873
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1874
    ^ self indexOfSeparatorStartingAt:1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1875
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1876
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1877
     'hello world' indexOfSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1878
     'helloworld' indexOfSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1879
     'hello   ' indexOfSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1880
     '   hello' indexOfSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1881
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1882
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1883
15912
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1884
indexOfSeparatorOrEndStartingAt:startIndex
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1885
    "return the index of the next whitespace character,
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1886
     starting the search at startIndex, searching forward;
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1887
     return the index of one behond the end of the receiver if no separator was found.
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1888
     To extract the word, copy from startIndex to the returned index-1"
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1889
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1890
    |idx|
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1891
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1892
    idx := self indexOfSeparatorStartingAt:startIndex.
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1893
    idx == 0 ifTrue:[^ self size + 1].
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1894
    ^ idx.
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1895
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1896
    "
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1897
     'hello world' indexOfSeparatorOrEndStartingAt:3
15912
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1898
     ' hello world' indexOfSeparatorOrEndStartingAt:3
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1899
     'hello world ' indexOfSeparatorOrEndStartingAt:3
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1900
     'hello world ' indexOfSeparatorOrEndStartingAt:6
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1901
     'hello world ' indexOfSeparatorOrEndStartingAt:7
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1902
     'helloworld ' indexOfSeparatorOrEndStartingAt:7
15912
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1903
     'helloworld' indexOfSeparatorOrEndStartingAt:7
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1904
    "
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1905
!
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1906
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1907
indexOfSeparatorStartingAt:startIndex
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1908
    "return the index of the next whitespace character,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1909
     starting the search at startIndex, searching forward;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1910
     return 0 if no separator was found"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1911
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1912
    |start  "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1913
     mySize "{ Class: SmallInteger }"|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1914
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1915
    start := startIndex.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1916
    mySize := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1917
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1918
    start to:mySize do:[:index |
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1919
	(self at:index) isSeparator ifTrue:[^ index]
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1920
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1921
    ^ 0
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1922
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1923
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1924
     'hello world' indexOfSeparatorStartingAt:3
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1925
     ' hello world' indexOfSeparatorStartingAt:3
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1926
     'hello world ' indexOfSeparatorStartingAt:3
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1927
     'hello world ' indexOfSeparatorStartingAt:6
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1928
     'hello world ' indexOfSeparatorStartingAt:7
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1929
     'helloworld ' indexOfSeparatorStartingAt:7
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1930
     'helloworld' indexOfSeparatorStartingAt:7
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1931
    "
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1932
!
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1933
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1934
lastIndexOfSeparator
14150
e13160aa321a comment/format in: #lastIndexOfSeparator
Claus Gittinger <cg@exept.de>
parents: 14141
diff changeset
  1935
    "return the last index of a whitespace character (space or tab).
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1936
     (i.e. start the search at the end and search backwards);
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1937
     Returns 0 if no separator is found."
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1938
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1939
    ^ self lastIndexOfSeparatorStartingAt:(self size)
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1940
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1941
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1942
     'hello world' lastIndexOfSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1943
     'helloworld' lastIndexOfSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1944
     'hel lo wor ld' lastIndexOfSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1945
     'hel   ' lastIndexOfSeparator 6
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1946
    "
14150
e13160aa321a comment/format in: #lastIndexOfSeparator
Claus Gittinger <cg@exept.de>
parents: 14141
diff changeset
  1947
e13160aa321a comment/format in: #lastIndexOfSeparator
Claus Gittinger <cg@exept.de>
parents: 14141
diff changeset
  1948
    "Modified (comment): / 01-06-2012 / 13:10:30 / cg"
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1949
!
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1950
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1951
lastIndexOfSeparatorStartingAt:startIndex
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1952
    "return the index of the previous whitespace character,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1953
     starting the search at startIndex (and searching backwards);
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1954
     returns 0 if no separator was found"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1955
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1956
    |start  "{ Class: SmallInteger }"|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1957
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1958
    start := startIndex.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1959
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1960
    start to:1 by:-1 do:[:index |
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1961
	(self at:index) isSeparator ifTrue:[^ index]
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1962
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1963
    ^ 0
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1964
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1965
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1966
     'hello world' lastIndexOfSeparatorStartingAt:3
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1967
     'hello world' lastIndexOfSeparatorStartingAt:7
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1968
     'helloworld' lastIndexOfSeparatorStartingAt:7
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1969
     ' helloworld' lastIndexOfSeparatorStartingAt:7
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1970
    "
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1971
! !
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1972
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1973
!CharacterArray methodsFor:'comparing'!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1974
6742
292775fda600 avoid endless recursion when comparing int < string
Claus Gittinger <cg@exept.de>
parents: 6655
diff changeset
  1975
< aString
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1976
    "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
  1977
     receiver is greater than the argument. Otherwise return false.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1978
     This comparison is based on the elements ascii code -
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1979
     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
  1980
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1981
    |mySize    "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1982
     otherSize "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1983
     n         "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1984
     c1 c2|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1985
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1986
    mySize := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1987
    otherSize := aString string size.
6742
292775fda600 avoid endless recursion when comparing int < string
Claus Gittinger <cg@exept.de>
parents: 6655
diff changeset
  1988
    n := mySize min:otherSize.
292775fda600 avoid endless recursion when comparing int < string
Claus Gittinger <cg@exept.de>
parents: 6655
diff changeset
  1989
292775fda600 avoid endless recursion when comparing int < string
Claus Gittinger <cg@exept.de>
parents: 6655
diff changeset
  1990
    1 to:n do:[:index |
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1991
	c1 := self at:index.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1992
	c2 := aString at:index.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  1993
	(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
  1994
    ].
292775fda600 avoid endless recursion when comparing int < string
Claus Gittinger <cg@exept.de>
parents: 6655
diff changeset
  1995
    ^ mySize < otherSize
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1996
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1997
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1998
= aString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1999
    "Compare the receiver with the argument and return true if the
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2000
     receiver is equal to the argument. Otherwise return false.
1252
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  2001
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  2002
     This compare does NOT ignore case differences,
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2003
     therefore 'foo' = 'Foo' will return false.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2004
     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
  2005
14137
1eb1b4a3f364 Inherit from UninterpretedBytes instead of ByteArray
Stefan Vogel <sv@exept.de>
parents: 14122
diff changeset
  2006
    |mySize    "{ Class: SmallInteger }"|
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2007
5963
23462e06dcff compare with Texts fixed (should compare equal if strings are)
Claus Gittinger <cg@exept.de>
parents: 5946
diff changeset
  2008
    (aString isString or:[aString species == self species]) ifFalse:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2009
	^ false
5963
23462e06dcff compare with Texts fixed (should compare equal if strings are)
Claus Gittinger <cg@exept.de>
parents: 5946
diff changeset
  2010
    ].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2011
    mySize := self size.
14137
1eb1b4a3f364 Inherit from UninterpretedBytes instead of ByteArray
Stefan Vogel <sv@exept.de>
parents: 14122
diff changeset
  2012
    mySize ~~ (aString size) ifTrue:[^ false].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2013
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2014
    1 to:mySize do:[:index |
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2015
	(self at:index) = (aString at:index) ifFalse:[^ false].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2016
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2017
    ^ true
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2018
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2019
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2020
     'foo' = 'Foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2021
     'foo' = 'bar'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2022
     'foo' = 'foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2023
     'foo' = 'foo' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2024
     'foo' asText = 'foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2025
     'foo' asText = 'foo' asText
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2026
    "
1252
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  2027
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  2028
    "Modified: 22.4.1996 / 15:53:58 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2029
!
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2030
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  2031
> aString
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2032
    "Compare the receiver with the argument and return true if the
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2033
     receiver is greater than the argument. Otherwise return false.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2034
     This comparison is based on the elements ascii code -
1252
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  2035
     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
  2036
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2037
    |mySize    "{ Class: SmallInteger }"
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2038
     otherSize "{ Class: SmallInteger }"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2039
     n         "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2040
     c1 c2|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2041
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2042
    mySize := self size.
5929
a3d2e7aaa3a3 added #compareCaselessWith:
Claus Gittinger <cg@exept.de>
parents: 5898
diff changeset
  2043
    otherSize := aString string size.
a3d2e7aaa3a3 added #compareCaselessWith:
Claus Gittinger <cg@exept.de>
parents: 5898
diff changeset
  2044
    n := mySize min:otherSize.
a3d2e7aaa3a3 added #compareCaselessWith:
Claus Gittinger <cg@exept.de>
parents: 5898
diff changeset
  2045
a3d2e7aaa3a3 added #compareCaselessWith:
Claus Gittinger <cg@exept.de>
parents: 5898
diff changeset
  2046
    1 to:n do:[:index |
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2047
	c1 := self at:index.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2048
	c2 := aString at:index.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2049
	(c1 == c2 or:[c1 = c2]) ifFalse:[^ c1 > c2].
5929
a3d2e7aaa3a3 added #compareCaselessWith:
Claus Gittinger <cg@exept.de>
parents: 5898
diff changeset
  2050
    ].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2051
    ^ mySize > otherSize
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2052
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2053
    "Modified: 22.4.1996 / 15:55:00 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2054
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2055
14660
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2056
after:aString
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2057
    "Compare the receiver with the argument and return true if the
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2058
     receiver should come after the argument in a sorted list.
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2059
     Otherwise return false.
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2060
     NOTE: The comparison should be language specific, depending on the value of
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2061
	    LC_COLLATE, which is initialized from the environment.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2062
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2063
	    Currently it is for Strings, but not for UnicodeStrings...
14660
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2064
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2065
     STUPID:
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2066
	#after has a completely different meaning in SeqColl ..."
14660
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2067
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2068
    ^ (self compareCollatingWith:aString) > 0
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2069
!
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2070
15814
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2071
compareAsVersionNumberWith:aStringOrCollection
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2072
    "Compare the receiver with the argument and return 1 if the receiver is
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2073
     greater, 0 if equal and -1 if less than the argument in a sorted list.
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2074
     Compare as version numbers in the form a.b.c... ."
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2075
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2076
    |rev1 rev2|
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2077
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2078
    rev1 := self asCollectionOfSubstringsSeparatedBy:$..
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2079
    aStringOrCollection isString ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2080
	rev2 := aStringOrCollection asCollectionOfSubstringsSeparatedBy:$..
15814
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2081
    ].
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2082
    rev1 := rev1 collect:[:each| each asInteger].
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2083
    rev2 := rev2 collect:[:each| each asInteger].
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2084
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2085
    ^ rev1 compareWith:rev2
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2086
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2087
   "
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2088
     self assert:('1' compareAsVersionNumberWith:'2') < 0.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2089
     self assert:('2' compareAsVersionNumberWith:'1') > 0.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2090
     self assert:('1.1' compareAsVersionNumberWith:'2.1.2') < 0.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2091
     self assert:('2.1' compareAsVersionNumberWith:'1.2.3') > 0.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2092
     self assert:('1' compareAsVersionNumberWith:'1.1') < 0.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2093
     self assert:('1.1' compareAsVersionNumberWith:'1') > 0.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2094
     self assert:('1.1' compareAsVersionNumberWith:'1.2') < 0.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2095
     self assert:('1.10' compareAsVersionNumberWith:'1.2') > 0.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2096
     self assert:('1.2.3.4' compareAsVersionNumberWith:'1.2.3.5') < 0.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2097
     self assert:('1.2.3.4' compareAsVersionNumberWith:'1.2.3.3') > 0.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2098
     self assert:('1.2.3.4' compareAsVersionNumberWith:'1.2.3') > 0.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2099
     self assert:('1.2.3.4' compareAsVersionNumberWith:'1.2.3.4') = 0.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2100
     self assert:('1.2.3.4' compareAsVersionNumberWith:'01.002.03.004') = 0.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2101
     self assert:('1.2.3.4' compareAsVersionNumberWith:#(1 2 3 4)) = 0.
15814
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2102
    "
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2103
!
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2104
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2105
compareCaselessWith:aString
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2106
    "Compare the receiver against the argument, ignoreing case.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2107
     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
  2108
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2109
     This comparison is based on the elements ascii code -
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2110
     i.e. national characters are NOT treated specially.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2111
     'foo' compareWith: 'Foo' will return 0"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2112
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2113
    |mySize    "{ Class: SmallInteger }"
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2114
     otherSize "{ Class: SmallInteger }"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2115
     n         "{ Class: SmallInteger }"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2116
     c1 c2|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2117
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2118
    mySize := self size.
5739
4fd3be7ccc75 oops some relational ops did accept a non-string arg
Claus Gittinger <cg@exept.de>
parents: 5732
diff changeset
  2119
    otherSize := aString string size.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2120
    n := mySize min:otherSize.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2121
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2122
    1 to:n do:[:index |
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2123
	c1 := (self at:index) asLowercase.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2124
	c2 := (aString at:index) asLowercase.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2125
	c1 > c2 ifTrue:[^ 1].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2126
	c1 < c2 ifTrue:[^ -1].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2127
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2128
    mySize > otherSize ifTrue:[^ 1].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2129
    mySize < otherSize ifTrue:[^ -1].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2130
    ^ 0
1252
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  2131
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  2132
    "Modified: 22.4.1996 / 15:56:07 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2133
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2134
14660
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2135
compareCollatingWith:aString
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2136
    "Compare the receiver with the argument and return 1 if the receiver is
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2137
     greater, 0 if equal and -1 if less than the argument in a sorted list.
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2138
     The comparison is language specific, depending on the value of
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2139
     LC_COLLATE, which is in the shell environment."
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2140
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2141
    "TODO not yet defined for unicode"
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2142
    <resource: #todo>
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2143
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2144
    |s|
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2145
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2146
    (s := self string) ~~ self ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2147
	^ s compareCollatingWith:aString
14660
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2148
    ].
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2149
    ^ self compareWith:aString
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2150
!
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2151
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2152
compareWith:aString
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2153
    "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
  2154
     greater, 0 if equal and -1 if less than the argument.
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2155
     This comparison is based on the elements' codepoints -
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2156
     i.e. upper/lowercase & national characters are NOT treated specially.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2157
     'foo' compareWith: 'Foo' will return 1.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2158
     while 'foo' sameAs:'Foo' will return true"
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2159
15814
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2160
    |s|
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2161
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2162
    s := self string.
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2163
    s ~~ self ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2164
	^ s compareWith:aString string.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2165
    ].
15814
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2166
    ^ super compareWith:aString string.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2167
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2168
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2169
endsWith:aStringOrCharacter
16175
05de577feb25 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16051
diff changeset
  2170
    "return true, if the receiver ends with something, aStringOrCharacter.
05de577feb25 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16051
diff changeset
  2171
     If aStringOrCharacter is empty, true is returned"
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2172
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2173
    |s|
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2174
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2175
    (s := self string) ~~ self ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2176
	^ s endsWith:aStringOrCharacter
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2177
    ].
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2178
    (self size > 0 and:[aStringOrCharacter isCharacter]) ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2179
	^ self last = aStringOrCharacter
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2180
    ].
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2181
    ^ super endsWith:aStringOrCharacter
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2182
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2183
    "
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2184
     'hello world' endsWith:'world'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2185
     'hello world' asText allBold endsWith:'world'
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2186
     'hello world' endsWith:''
16175
05de577feb25 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16051
diff changeset
  2187
     'hello world' asText allBold endsWith:''
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2188
    "
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2189
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2190
    "Modified: 12.5.1996 / 15:49:18 / cg"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2191
!
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2192
11838
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  2193
hammingDistanceTo:aString
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  2194
    "return the hamming distance (the number of characters which are different).
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2195
     In information theory, the Hamming distance between two strings of equal length
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2196
     is the number of positions for which the corresponding symbols are different.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2197
     Put another way, it measures the minimum number of substitutions required to change
11838
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  2198
     one into the other, or the number of errors that transformed one string into the other."
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  2199
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  2200
    self assert:(aString size == self size).
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  2201
    ^ 1 to:self size count:[:idx | (self at:idx) ~= (aString at:idx)]
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  2202
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  2203
    "
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  2204
     'roses' hammingDistanceTo:'toned'
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  2205
    "
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  2206
!
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  2207
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2208
hash
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2209
    "return an integer useful as a hash-key"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2210
16898
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2211
    "/ whenever changing, also care for String>>hash.
13879
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2212
    "/ immediately after any change, execute (maybe in a debugger):
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2213
    "/      Set allSubInstancesDo:[:s | s rehash]
16898
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2214
    ^ self hash_fnv1a
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2215
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2216
    "
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2217
     'a' hash
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2218
     'a' asUnicode16String hash
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2219
     'a' asUnicode32String hash
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2220
     'aa' hash
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2221
     'aa' asUnicode16String hash
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2222
     'aa' asUnicode32String hash
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2223
     'ab' hash
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2224
     'ab' asUnicode16String hash
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2225
     'ab' asUnicode32String hash
13879
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2226
     'ab' hash
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2227
     'ab' asArray hash
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2228
    "
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2229
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2230
    "
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2231
	|syms ms|
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2232
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2233
	syms := Symbol allInstances.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2234
	Transcript show:'syms: '; showCR:syms size.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2235
	Transcript show:'sdbm hashes: '; showCR:(syms collect:[:s| s hash]) asSet size.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2236
	Transcript show:'dragonBook hashes: '; showCR:(syms collect:[:s| s hash_dragonBook]) asSet size.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2237
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2238
	ms := Time millisecondsToRun:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2239
	    10 timesRepeat:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2240
		syms do:[:each| each hash].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2241
	    ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2242
	].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2243
	Transcript show:'sdbm hash: '; showCR:ms.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2244
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2245
	ms := Time millisecondsToRun:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2246
	    10 timesRepeat:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2247
		syms do:[:each| each hash_dragonBook].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2248
	    ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2249
	].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2250
	Transcript show:'dragonBook: '; showCR:ms.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2251
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2252
	syms := syms collect:[:each| each asUnicode16String].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2253
	ms := Time millisecondsToRun:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2254
	    10 timesRepeat:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2255
		syms do:[:each| each hash].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2256
	    ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2257
	].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2258
	Transcript show:'unicode sdbm hash: '; showCR:ms.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2259
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2260
	ms := Time millisecondsToRun:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2261
	    10 timesRepeat:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2262
		syms do:[:each| each hash_dragonBook].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2263
	    ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2264
	].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2265
	Transcript show:'unicode dragonBook:'; showCR:ms.
14641
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2266
    "
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2267
13879
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2268
    "Modified: / 26-12-2011 / 14:09:07 / cg"
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2269
!
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2270
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2271
hash_dragonBook
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2272
    "return an integer useful as a hash-key"
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2273
10698
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2274
    |h g|
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2275
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2276
    "/
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2277
    "/ this is the dragon-book algorithm
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2278
    "/
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2279
    h := 0.
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2280
    self reverseDo:[:char |
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2281
"/ 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
  2282
"/        h := (h bitShift:4) + char asciiValue.
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2283
	h := (h bitShift:4).
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2284
	h := h + char codePoint.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2285
	h := h bitAnd:16rFFFFFFFF.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2286
	g := (h bitAnd: 16rF0000000).
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2287
	g ~~ 0 ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2288
	    h := h bitXor:(g bitShift:-24).
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2289
	    h := h bitXor:g.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2290
	].
10698
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2291
    ].
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2292
    "/
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2293
    "/ multiply by large prime to spread values
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2294
    "/ This speeds up Set and Dictionary by a factor of 10!!
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2295
    "/
14137
1eb1b4a3f364 Inherit from UninterpretedBytes instead of ByteArray
Stefan Vogel <sv@exept.de>
parents: 14122
diff changeset
  2296
    h := h times:31415821.
10698
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2297
    ^ h
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2298
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2299
    "
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2300
     'a' hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2301
     'a' asUnicode16String hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2302
     'aa' hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2303
     'aa' asUnicode16String hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2304
     'ab' hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2305
     'ab' asUnicode16String hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2306
     'ab' hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2307
     'ab' asArray hash
10698
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2308
    "
13879
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2309
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2310
    "Created: / 26-12-2011 / 13:46:06 / cg"
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2311
!
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2312
16887
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2313
hash_fnv1a
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2314
    "return an integer useful as a hash-key.
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2315
     This method uses the fnv-1a algorithm
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2316
     (which is actually a very good one)"
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2317
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2318
    |h|
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2319
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2320
    h := 2166136261.
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2321
    self do:[:eachChar |
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2322
	h := h bitXor:(eachChar codePoint).
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2323
	h := (h * 16777619) bitAnd:16rFFFFFFFF.
16887
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2324
    ].
16898
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2325
    "/ make sure, it fits into a smallInt
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2326
    h := (h bitXor: (h >> 30)) bitAnd: 16r3FFFFFFF.
16887
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2327
    ^ h
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2328
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2329
    "
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2330
     'abc' hash_fnv1a
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2331
     'abc' asUnicode16String hash_fnv1a
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2332
     'abc' asUnicode32String hash_fnv1a
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2333
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2334
     'foofooHelloWorld' hash_fnv1a
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2335
     'foofooHelloWorld' asUnicode16String hash_fnv1a
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2336
     'foofooHelloWorld' asUnicode32String hash_fnv1a
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2337
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2338
     'blablaHelloWorld' hash_fnv1a
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2339
     'blablaHelloWorld' asUnicode16String hash_fnv1a
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2340
     'blablaHelloWorld' asUnicode32String hash_fnv1a
16887
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2341
    "
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2342
!
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2343
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2344
hash_java
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2345
    "return an integer useful as a hash-key.
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2346
     This method uses the same algorithm as used in
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2347
     the java virtual machine
16887
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2348
     (which is actually not a very good one)."
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2349
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2350
    |h|
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2351
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2352
    h := 0.
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2353
    self do:[:eachChar |
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2354
	h := (h * 31) + (eachChar codePoint).
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2355
	h := h bitAnd:16rFFFFFFFF.
16887
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2356
    ].
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2357
    ^ h
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2358
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2359
    "
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2360
     'abc' hash_java
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2361
     'foofooHelloWorld' hash_java
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2362
     'blablaHelloWorld' hash_java
16887
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2363
    "
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2364
!
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2365
16898
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2366
hash_sdbm
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2367
    "return an integer useful as a hash-key.
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2368
     This method implements the sdbm algorithm."
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2369
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2370
    |h|
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2371
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2372
    "/
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2373
    "/ this is the sdbm algorithm
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2374
    "/
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2375
    h := 0.
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2376
    self do:[:char |
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2377
	h := (65599 times:h) plus:char codePoint.
16898
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2378
    ].
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2379
    ^ h
16898
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2380
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2381
    "
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2382
     'a' hash
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2383
     'a' asUnicode16String hash
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2384
     'aa' hash
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2385
     'aa' asUnicode16String hash
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2386
     'ab' hash
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2387
     'ab' asUnicode16String hash
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2388
     'ab' hash
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2389
     'ab' asArray hash
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2390
    "
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2391
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2392
    "
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2393
	|syms ms|
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2394
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2395
	syms := Symbol allInstances.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2396
	Transcript show:'syms: '; showCR:syms size.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2397
	Transcript show:'sdbm hashes: '; showCR:(syms collect:[:s| s hash]) asSet size.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2398
	Transcript show:'dragonBook hashes: '; showCR:(syms collect:[:s| s hash_dragonBook]) asSet size.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2399
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2400
	ms := Time millisecondsToRun:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2401
	    10 timesRepeat:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2402
		syms do:[:each| each hash].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2403
	    ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2404
	].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2405
	Transcript show:'sdbm hash: '; showCR:ms.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2406
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2407
	ms := Time millisecondsToRun:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2408
	    10 timesRepeat:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2409
		syms do:[:each| each hash_dragonBook].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2410
	    ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2411
	].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2412
	Transcript show:'dragonBook: '; showCR:ms.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2413
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2414
	syms := syms collect:[:each| each asUnicode16String].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2415
	ms := Time millisecondsToRun:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2416
	    10 timesRepeat:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2417
		syms do:[:each| each hash].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2418
	    ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2419
	].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2420
	Transcript show:'unicode sdbm hash: '; showCR:ms.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2421
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2422
	ms := Time millisecondsToRun:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2423
	    10 timesRepeat:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2424
		syms do:[:each| each hash_dragonBook].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2425
	    ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2426
	].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2427
	Transcript show:'unicode dragonBook:'; showCR:ms.
16898
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2428
    "
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2429
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2430
    "Modified: / 26-12-2011 / 14:09:07 / cg"
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2431
!
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2432
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2433
levenshteinTo:aString
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2434
    "return the levenshtein distance to the argument, aString;
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2435
     this value corresponds to the number of replacements that have to be
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2436
     made to get aString from the receiver.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2437
     See IEEE transactions on Computers 1976 Pg 172 ff."
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2438
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2439
    "
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2440
     in the following, we assume that ommiting a character
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2441
     is less of an error than inserting an extra character.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2442
     Therefore the different insertion (i) and deletion (d) values.
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2443
	s: substitution weight (4)
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2444
	k: keyboard weight (k) (typing a nearby key) - or nil (then use s)
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2445
	c: case weight (4)                           - or nil (then use s)
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2446
	e: exchange weight (8)                       - or nil (then use s*2)
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2447
	i: insertion of extra character weight (2)
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2448
	d: delete of a character weight (6)
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2449
    "
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2450
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2451
    ^ StringUtilities
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2452
	    levenshteinDistanceFrom:self
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2453
	    to:aString
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2454
	    s:4 k:4 c:4 e:nil i:2 d:6
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2455
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2456
    "
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2457
     'computer' levenshteinTo:'computer'
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2458
     'cOmputer' levenshteinTo:'computer'
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2459
     'cOmpuTer' levenshteinTo:'computer'
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2460
     'cimputer' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2461
     'cumputer' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2462
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2463
     'cmputer' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2464
     'coomputer' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2465
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2466
     'ocmprt' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2467
     'computer' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2468
     'ocmputer' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2469
     'cmputer' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2470
     'computer' levenshteinTo:'cmputer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2471
     'Computer' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2472
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2473
     'compiter' levenshteinTo:'computer'
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2474
     'compoter' levenshteinTo:'computer'
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2475
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2476
     'comptuer' levenshteinTo:'computer'
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2477
    "
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2478
!
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2479
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2480
levenshteinTo:aString s:substWeight k:kbdTypoWeight c:caseWeight i:insrtWeight d:deleteWeight
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2481
    "parametrized levenshtein.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2482
     return the levenshtein distance to the argument, aString;
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2483
     this value corrensponds to the number of replacements that have to be
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2484
     made to get aString from the receiver.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2485
     The arguments are the costs for
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2486
	s:substitution,
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2487
	k:keyboard type (substitution),
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2488
	c:case-change,
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2489
	i:insertion
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2490
	d:deletion
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2491
     of a character.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2492
     See IEEE transactions on Computers 1976 Pg 172 ff"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2493
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2494
    ^ StringUtilities
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2495
	    levenshteinDistanceFrom:self
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2496
	    to:aString
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2497
	    s:substWeight k:kbdTypoWeight c:caseWeight e:nil i:insrtWeight d:deleteWeight
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2498
!
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2499
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2500
sameAs:aString
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2501
    "Compare the receiver with the argument like =, but ignore case differences.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2502
     Return true or false."
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2503
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2504
    |mySize "{ Class: SmallInteger }"
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2505
     otherSize c1 c2|
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2506
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2507
    self == aString ifTrue:[^ true].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2508
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2509
    mySize := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2510
    otherSize := aString string size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2511
    mySize == otherSize ifFalse:[^ false].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2512
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2513
    1 to:mySize do:[:index |
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2514
	c1 := self at:index.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2515
	c2 := aString at:index.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2516
	c1 == c2 ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2517
	    (c1 sameAs:c2) ifFalse:[^ false].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2518
	]
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2519
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2520
    ^ true
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2521
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2522
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2523
     'foo' sameAs: 'Foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2524
     'foo' sameAs: 'bar'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2525
     'foo' sameAs: 'foo'
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2526
    "
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
    "Modified: 22.4.1996 / 15:56:17 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2529
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2530
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2531
sameAs:aString caseSensitive:caseSensitive
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2532
    "Compare the receiver with the argument.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2533
     If caseSensitive is false, this is the same as #sameAs:,
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2534
     if false, this is the same as #=."
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2535
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2536
    caseSensitive ifFalse:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2537
	^ self sameAs:aString
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2538
    ].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2539
    ^ self = aString
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2540
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2541
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2542
     'foo' sameAs:'Foo' caseSensitive:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2543
     'foo' sameAs:'foo' caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2544
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2545
!
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2546
5242
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2547
sameAs:aString ignoreCase:ignoreCase
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2548
    <resource: #obsolete>
5242
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2549
    "Compare the receiver with the argument.
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2550
     If ignoreCase is true, this is the same as #sameAs:,
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2551
     if false, this is the same as #=."
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2552
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2553
    ignoreCase ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2554
	^ self sameAs:aString
5242
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2555
    ].
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2556
    ^ self = aString
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2557
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2558
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2559
     'foo' sameAs:'Foo' ignoreCase:false
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2560
     'foo' sameAs:'foo' ignoreCase:true
5242
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2561
    "
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2562
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2563
!
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2564
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2565
sameCharacters:aString
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2566
    "count & return the number of characters which are the same
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2567
     (ignoring case and emphasis) in the receiver and the argument, aString."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2568
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2569
    |n "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2570
     c1 c2 cnt|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2571
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2572
    n := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2573
    n := n min:(aString string size).
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
    cnt := 0.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2576
    1 to:n do:[:index |
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2577
	c1 := self at:index.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2578
	c2 := aString at:index.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2579
	((c1 == c2)
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2580
	or:[c1 asLowercase = c2 asLowercase]) ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2581
	    cnt := cnt + 1
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2582
	]
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2583
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2584
    ^ cnt
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2585
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2586
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2587
     'foobarbaz' sameCharacters: 'foo'
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2588
     'foobarbaz' sameCharacters: 'Foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2589
     'foobarbaz' sameCharacters: 'baz'
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2590
    "
5510
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2591
!
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2592
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2593
sameEmphasisAs:aStringOrText
17215
0906efa5645d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17213
diff changeset
  2594
    "compare the receiver's and the argument's emphasis"
5510
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2595
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2596
    ^ self emphasis = aStringOrText emphasis
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2597
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2598
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2599
     'hello' asText sameEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2600
     'hello' asText sameEmphasisAs: 'hello' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2601
     'hello' asText allBold sameEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2602
     'hello' asText allBold sameEmphasisAs: 'fooba' asText allBold
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2603
     'hello' asText allBold sameEmphasisAs: 'fooba' asText allItalic
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2604
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2605
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2606
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  2607
sameStringAndEmphasisAs:aStringOrText
5739
4fd3be7ccc75 oops some relational ops did accept a non-string arg
Claus Gittinger <cg@exept.de>
parents: 5732
diff changeset
  2608
    "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
  2609
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2610
    aStringOrText isString ifFalse:[^ false].
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2611
    (self string = aStringOrText string) ifFalse:[^ false].
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2612
    self hasChangeOfEmphasis = aStringOrText hasChangeOfEmphasis ifFalse:[^ false].
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2613
    ^ self emphasis = aStringOrText emphasis
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2614
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2615
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2616
     'hello' asText sameEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2617
     'hello' asText sameEmphasisAs: 'hello' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2618
     'hello' asText allBold sameEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2619
     'hello' asText allBold sameEmphasisAs: 'fooba' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2620
     'hello' asText allBold sameEmphasisAs: 'fooba' asText allItalic
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2621
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2622
     'hello' sameEmphasisAs: 'hello' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2623
     'hello' sameEmphasisAs: 'hello' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2624
     'hello' sameEmphasisAs: 'fooba'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2625
     'hello' sameEmphasisAs: 'fooba' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2626
     'hello' sameEmphasisAs: 'fooba' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2627
     'hello' sameEmphasisAs: 'fooba' asText allItalic
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2628
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2629
     'hello' asText sameStringAndEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2630
     'hello' asText sameStringAndEmphasisAs: 'hello' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2631
     'hello' asText allBold sameStringAndEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2632
     'hello' asText allBold sameStringAndEmphasisAs: 'fooba' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2633
     'hello' asText allBold sameStringAndEmphasisAs: 'fooba' asText allItalic
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2634
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2635
     'hello' sameStringAndEmphasisAs: 'hello' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2636
     'hello' sameStringAndEmphasisAs: 'hello' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2637
     'hello' sameStringAndEmphasisAs: 'fooba'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2638
     'hello' sameStringAndEmphasisAs: 'fooba' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2639
     'hello' sameStringAndEmphasisAs: 'fooba' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2640
     'hello' sameStringAndEmphasisAs: 'fooba' asText allItalic
5510
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2641
    "
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2642
!
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2643
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2644
spellAgainst: aString
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2645
    "return an integer between 0 and 100 indicating how similar
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2646
     the argument is to the receiver.  No case conversion is done.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2647
     This algorithm is much simpler (but also less exact) than the
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2648
     levenshtein distance. Experiment which is better for your
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2649
     application."
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2650
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2651
    | i1     "{ Class: SmallInteger }"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2652
      i2     "{ Class: SmallInteger }"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2653
      next1  "{ Class: SmallInteger }"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2654
      next2  "{ Class: SmallInteger }"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2655
      size1  "{ Class: SmallInteger }"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2656
      size2  "{ Class: SmallInteger }"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2657
      score  "{ Class: SmallInteger }"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2658
      maxLen "{ Class: SmallInteger }" |
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2659
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2660
    size1 := self size.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2661
    size2 := aString size.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2662
    maxLen := size1 max:size2.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2663
    score := 0.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2664
    i1 := i2 := 1.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2665
    [i1 <= size1 and: [i2 <= size2]] whileTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2666
	next1 := i1 + 1.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2667
	next2 := i2 + 1.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2668
	(self at:i1) == (aString at:i2) ifTrue: [
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2669
	    score := score+1.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2670
	    i1 := next1.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2671
	    i2 := next2
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2672
	] ifFalse: [
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2673
	    (i2 < size2 and: [(self at:i1) == (aString at:next2)]) ifTrue: [
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2674
		i2 := next2
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2675
	    ] ifFalse: [
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2676
		(i1 < size1 and: [(self at:next1) == (aString at:i2)]) ifTrue: [
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2677
		    i1 := next1
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2678
		] ifFalse: [
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2679
		    i1 := next1.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2680
		    i2 := next2
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2681
		]
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2682
	    ]
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2683
	]
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2684
    ].
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2685
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2686
    score == maxLen ifTrue: [^ 100].
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2687
    ^ 100 * score // maxLen
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2688
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2689
    "
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2690
     'Smalltalk' spellAgainst: 'Smalltlak'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2691
     'Smalltalk' spellAgainst: 'smalltlak'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2692
     'Smalltalk' spellAgainst: 'smalltalk'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2693
     'Smalltalk' spellAgainst: 'smalltlk'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2694
     'Smalltalk' spellAgainst: 'Smalltolk'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2695
    "
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2696
!
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2697
16553
d2f7a990d66b class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16473
diff changeset
  2698
startsWith:aStringOrCharacter
d2f7a990d66b class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16473
diff changeset
  2699
    "return true, if the receiver starts with something, aStringOrCharacter.
17371
cbb00370b456 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17367
diff changeset
  2700
     If the argument is empty, true is returned.
cbb00370b456 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17367
diff changeset
  2701
     Notice, that this is similar to, but slightly different from VW's and Squeak's beginsWith:,
cbb00370b456 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17367
diff changeset
  2702
     which are both inconsistent w.r.t. an empty argument."
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2703
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2704
    |s|
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2705
16553
d2f7a990d66b class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16473
diff changeset
  2706
    aStringOrCharacter isCharacter ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2707
	^ (self size > 0) and:[ (self at:1) == aStringOrCharacter ]
16553
d2f7a990d66b class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16473
diff changeset
  2708
    ].
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2709
    (s := self string) ~~ self ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2710
	^ s startsWith:aStringOrCharacter
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2711
    ].
16553
d2f7a990d66b class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16473
diff changeset
  2712
    ^ super startsWith:aStringOrCharacter
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2713
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2714
    "
17364
62b006f570cb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17241
diff changeset
  2715
     'abcde' startsWith:#($a $b $c)
62b006f570cb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17241
diff changeset
  2716
     'abcde' startsWith:'abc'
62b006f570cb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17241
diff changeset
  2717
     'abcd' startsWith:'abcde'
62b006f570cb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17241
diff changeset
  2718
     'abcde' startsWith:'abd'
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2719
     'hello world' startsWith:'hello'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2720
     'hello world' asText allBold startsWith:'hello'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2721
     'hello world' asText allBold startsWith:''
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2722
    "
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2723
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2724
    "Created: 12.5.1996 / 15:46:40 / cg"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2725
    "Modified: 12.5.1996 / 15:49:24 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2726
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2727
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2728
!CharacterArray methodsFor:'converting'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2729
11881
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2730
asAsciiZ
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2731
    "if the receiver does not end with a 0-valued character, return a copy of it,
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2732
     with an additional 0-character. Otherwise return the receiver. This is sometimes
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2733
     needed when a string has to be passed to C, which needs 0-terminated strings.
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2734
     Notice, that all singleByte strings are already 0-terminated in ST/X, whereas wide
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2735
     strings are not."
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2736
12658
2e9c209be0cc changed: #asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 12615
diff changeset
  2737
    (self notEmpty and:[self last codePoint == 0]) ifTrue:[^ self ].
11881
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2738
    ^ self copyWith:(Character value:0).
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2739
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2740
    "
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2741
     'abc' asAsciiZ
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2742
     'abc' asWideString asAsciiZ
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2743
    "
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2744
!
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2745
13524
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2746
asByteArray
15936
96c6758087c1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15912
diff changeset
  2747
    "depending on the size of the characters in the receiver,
96c6758087c1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15912
diff changeset
  2748
     return a byteArray containing single-, double- or even 4-bytewise values.
96c6758087c1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15912
diff changeset
  2749
     The size of the returned byteArray will be the strings size multiplied by the
96c6758087c1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15912
diff changeset
  2750
     size required for the largest character.
96c6758087c1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15912
diff changeset
  2751
     Caveat: better use utf8Encoded, to get reproducable results"
96c6758087c1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15912
diff changeset
  2752
14555
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2753
    |bytes sz bytesPerCharacter idx str|
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2754
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2755
    str := self string.
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2756
    str ~~ self ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2757
	"/ for text and other wrappers
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2758
	^ str asByteArray
13611
ba8c7372218a variable renamed in: #inspector2TabBytes
Claus Gittinger <cg@exept.de>
parents: 13524
diff changeset
  2759
    ].
ba8c7372218a variable renamed in: #inspector2TabBytes
Claus Gittinger <cg@exept.de>
parents: 13524
diff changeset
  2760
ba8c7372218a variable renamed in: #inspector2TabBytes
Claus Gittinger <cg@exept.de>
parents: 13524
diff changeset
  2761
    "/ for real strings, a fallback
13524
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2762
    sz := self size.
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2763
    bytesPerCharacter := self bitsPerCharacter // 8.
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2764
    bytes := ByteArray new:(sz * bytesPerCharacter).
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2765
    idx := 1.
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2766
    self do:[:char |
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2767
	|code|
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2768
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2769
	code := char codePoint.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2770
	bytesPerCharacter == 2 ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2771
	    bytes unsignedShortAt:idx put:code
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2772
	] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2773
	    bytesPerCharacter == 4 ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2774
		bytes unsignedLongAt:idx put:code
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2775
	    ] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2776
		bytes at:idx put:code
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2777
	    ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2778
	].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2779
	idx := idx + bytesPerCharacter.
13524
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2780
    ].
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2781
    ^ bytes
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2782
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2783
    "Created: / 27-07-2011 / 00:56:17 / cg"
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2784
!
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2785
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2786
asCollectionOfLines
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2787
    "return a collection containing the lines (separated by cr)
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2788
     of the receiver. If multiple cr's occur in a row, the result will
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2789
     contain empty strings.
14456
d7c3e67647f1 comment/format in: #asCollectionOfLines
Claus Gittinger <cg@exept.de>
parents: 14455
diff changeset
  2790
     If the string ends with a cr, an empty line will be found as last element of the resulting collection.
d7c3e67647f1 comment/format in: #asCollectionOfLines
Claus Gittinger <cg@exept.de>
parents: 14455
diff changeset
  2791
     See also #asCollectionOfLinesWithReturn
d7c3e67647f1 comment/format in: #asCollectionOfLines
Claus Gittinger <cg@exept.de>
parents: 14455
diff changeset
  2792
     (would have rather changed this method instead of adding another one, but a lot of code already uses
d7c3e67647f1 comment/format in: #asCollectionOfLines
Claus Gittinger <cg@exept.de>
parents: 14455
diff changeset
  2793
      this method and we did not want to risk any incompatibilities)"
14455
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2794
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2795
    ^ self asCollectionOfSubstringsSeparatedBy:Character cr.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2796
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2797
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2798
     '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
  2799
     '1 one\\\\2 two\3 three' withCRs asCollectionOfLines
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2800
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2801
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2802
14455
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2803
asCollectionOfLinesWithReturn
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2804
    "return a collection containing the lines (separated by cr)
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2805
     of the receiver. If multiple cr's occur in a row, the result will
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2806
     contain empty strings."
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2807
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2808
    |lines|
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2809
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2810
    lines := self asCollectionOfSubstringsSeparatedBy:Character cr.
18194
bec89cec5d13 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18181
diff changeset
  2811
    (lines notEmpty and:[lines last isEmpty]) ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2812
	^ lines copyButLast:1
14455
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2813
    ].
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2814
    ^ lines
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2815
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2816
    "
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2817
     '1\2\3' withCRs asCollectionOfLines
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2818
     '1\2\3\' withCRs asCollectionOfLines
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2819
     '1\2\3' withCRs asCollectionOfLinesWithReturn
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2820
     '1\2\3\' withCRs asCollectionOfLinesWithReturn
18194
bec89cec5d13 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18181
diff changeset
  2821
     '' withCRs asCollectionOfLinesWithReturn
14455
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2822
    "
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2823
!
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2824
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2825
asCollectionOfSubstringsSeparatedBy:aCharacter
15740
87dee3333591 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15734
diff changeset
  2826
    "return a collection containing substrings (separated by aCharacter)
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2827
     of the receiver.
15740
87dee3333591 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15734
diff changeset
  2828
     If aCharacter occurs multiple times in a row, the result will contain empty strings.
87dee3333591 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15734
diff changeset
  2829
     If the receiver ends with aCharacter, an empty string with be the last result element."
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2830
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2831
    ^ self asCollectionOfSubCollectionsSeparatedBy:aCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2832
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2833
    "
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2834
     '1 one:2 two:3 three:4 four:5 five' asCollectionOfSubstringsSeparatedBy:$:
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2835
     '1 one:2 two:3 three:4 four:5 five:' asCollectionOfSubstringsSeparatedBy:$:
15740
87dee3333591 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15734
diff changeset
  2836
     '1 one 2 two 3 three 4 four 5 five' asCollectionOfSubstringsSeparatedBy:Character space
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2837
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2838
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2839
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2840
asCollectionOfSubstringsSeparatedBy:aCharacter exceptIn:ch
15740
87dee3333591 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15734
diff changeset
  2841
    "return a collection containing the substrings (separated by aCharacter)
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2842
     of the receiver. If aCharacter occurs multiple times in a row,
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2843
     the result will contain empty strings.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2844
     The separation is not done, inside a matching pair of ch-substrings.
15740
87dee3333591 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15734
diff changeset
  2845
     Can be used to tokenize csv-like strings, which may or may not be enclosed in quotes."
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2846
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2847
    |lines myClass except i c
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2848
     startIndex    "{ Class:SmallInteger }"
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2849
     stopIndex     "{ Class:SmallInteger }" |
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2850
11905
cbc2191cfe2d return stringCollections from asCollectionOfXXX
Claus Gittinger <cg@exept.de>
parents: 11904
diff changeset
  2851
    lines := StringCollection new.
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2852
    myClass := self species.
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2853
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2854
    startIndex := 1.
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2855
    except := false.
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2856
    [
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2857
	i := startIndex-1.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2858
	[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2859
	    i := i+1.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2860
	    c := self at:i.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2861
	    c = ch ifTrue:[ except := except not. ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2862
	    i < self size and:[except or:[c ~= aCharacter]]
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2863
	] whileTrue.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2864
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2865
	c = aCharacter ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2866
	    stopIndex := i -1.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2867
	] ifFalse: [
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2868
	    stopIndex := i.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2869
	].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2870
	(stopIndex < startIndex) ifTrue: [
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2871
	    lines add:(myClass new:0)
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2872
	] ifFalse: [
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2873
	    lines add:(self copyFrom:startIndex to:stopIndex)
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2874
	].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2875
	startIndex := stopIndex + 2.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2876
	startIndex <= self size
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2877
    ] whileTrue.
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2878
    ^ lines
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2879
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2880
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2881
     'asd''f;d''dd;s' asCollectionOfSubstringsSeparatedBy:$; exceptIn:$'
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2882
    "
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2883
    "/ 'asd "hello bla" foo "bla bla" bar' asCollectionOfSubstringsSeparatedBy:$  exceptIn:$"
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2884
!
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2885
13344
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2886
asCollectionOfSubstringsSeparatedBy:aFieldSeparatorString textSeparator:aTextSeparatorOrNil
13343
3f058ad0d2f1 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13332
diff changeset
  2887
    "return a collection containing the words (separated by aFieldSeparatorString) of the receiver.
13327
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2888
     Individual words might be enclosed in aTextSeparator characters, in case they contain blanks or fieldSeparators.
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2889
     Typically used for CSV line parsing, with a $; as aFieldSeparator and $'' (dquote) as textSeparator."
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2890
13344
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2891
    |aTextSeparatorChar items scanningWord inStream element lastIsFieldSeparator sz|
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2892
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2893
    aTextSeparatorOrNil isNil ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2894
	^ self asCollectionOfSubstringsSeparatedByAll: aFieldSeparatorString
13327
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2895
    ].
13344
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2896
    sz := aTextSeparatorOrNil size.
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2897
    sz = 0 ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2898
	aTextSeparatorChar := aTextSeparatorOrNil
13344
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2899
    ] ifFalse:[sz = 1  ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2900
	"this is a String. Fetch the first character - compatibility to older expecco libs"
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2901
	aTextSeparatorChar := aTextSeparatorOrNil first.
13344
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2902
    ] ifFalse:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2903
	self error:'textSeparatoSize > 1'.
13344
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2904
    ]].
13327
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2905
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2906
    items := OrderedCollection new.
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2907
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2908
    inStream := ReadStream on:self.
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  2909
    [
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2910
	inStream skipSeparators.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2911
	inStream atEnd
13327
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2912
    ] whileFalse:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2913
	lastIsFieldSeparator := false.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2914
	inStream peek == aTextSeparatorChar ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2915
	    inStream next.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2916
	    element := ''.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2917
	    scanningWord := true.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2918
	    [ scanningWord and:[inStream atEnd not] ] whileTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2919
		element := element , (inStream upTo:aTextSeparatorChar).
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2920
		(inStream peek == aTextSeparatorChar) ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2921
		    element := element , aTextSeparatorChar .
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2922
		    inStream next.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2923
		] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2924
		    scanningWord := false.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2925
		].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2926
	    ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2927
	    inStream upToAll_positionBefore:aFieldSeparatorString.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2928
	] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2929
	    element := inStream upToAll_positionBefore:aFieldSeparatorString
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2930
	].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2931
	items add:element.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2932
	lastIsFieldSeparator := (inStream skipThroughAll:aFieldSeparatorString) notNil.
13343
3f058ad0d2f1 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13332
diff changeset
  2933
    ].
3f058ad0d2f1 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13332
diff changeset
  2934
    lastIsFieldSeparator ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2935
	"empty element at the end of the line"
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2936
	items add:''.
13327
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2937
    ].
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2938
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2939
    ^ items
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2940
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2941
    "
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2942
     self assert:(('#First#, #Second,SecondAdd#, #Third#' asCollectionOfSubstringsSeparatedBy:',' textSeparator: $#)
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2943
		  sameContentsAs:#('First' 'Second,SecondAdd' 'Third')).
13327
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2944
     self assert:(('#Fir##st#, #Second,SecondAdd#, #Third#' asCollectionOfSubstringsSeparatedBy:',' textSeparator: $#)
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2945
		  sameContentsAs:#('Fir#st' 'Second,SecondAdd' 'Third')).
13327
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2946
     self assert:(('#Fir##st#, Second,SecondAdd, #Third#' asCollectionOfSubstringsSeparatedBy:',' textSeparator: $#)
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2947
		  sameContentsAs:#('Fir#st' 'Second' 'SecondAdd' 'Third')).
13343
3f058ad0d2f1 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13332
diff changeset
  2948
     self assert:(('First,Second,Third,,' asCollectionOfSubstringsSeparatedBy:',' textSeparator:nil)
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2949
		   sameContentsAs:#('First' 'Second' 'Third' '' '')).
13344
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2950
     self assert:(('First,Second,Third,,' asCollectionOfSubstringsSeparatedBy:',' textSeparator:'#')
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  2951
		   sameContentsAs:#('First' 'Second' 'Third' '' '')).
13327
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2952
    "
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2953
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2954
    "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
  2955
!
999589445aa7 add new method for splitting a csv string into csv elements
ab
parents: 10437
diff changeset
  2956
7339
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2957
asCollectionOfSubstringsSeparatedByAll:aSeparatorString
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2958
    "return a collection containing the lines (separated by aSeparatorString)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2959
     of the receiver. If aSeparatorString occurs multiple times in a row,
7339
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2960
     the result will contain empty strings."
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2961
8852
9f5984eff2c2 use asCollectionOfSubCollectionsSeparatedBy*
Claus Gittinger <cg@exept.de>
parents: 8794
diff changeset
  2962
    ^ self asCollectionOfSubCollectionsSeparatedByAll:aSeparatorString
9f5984eff2c2 use asCollectionOfSubCollectionsSeparatedBy*
Claus Gittinger <cg@exept.de>
parents: 8794
diff changeset
  2963
9f5984eff2c2 use asCollectionOfSubCollectionsSeparatedBy*
Claus Gittinger <cg@exept.de>
parents: 8794
diff changeset
  2964
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2965
     '1::2::3::4::5::' asCollectionOfSubstringsSeparatedByAll:'::'
7339
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2966
    "
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2967
!
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2968
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2969
asCollectionOfSubstringsSeparatedByAny:aCollectionOfSeparators
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2970
    "return a collection containing the words (separated by any character
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2971
     from aCollectionOfSeparators) of the receiver.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2972
     This allows breaking up strings using any character as separator."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2973
8852
9f5984eff2c2 use asCollectionOfSubCollectionsSeparatedBy*
Claus Gittinger <cg@exept.de>
parents: 8794
diff changeset
  2974
    ^ self asCollectionOfSubCollectionsSeparatedByAny:aCollectionOfSeparators
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2975
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2976
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2977
     'hello:world:isnt:this nice' asCollectionOfSubstringsSeparatedByAny:#($:)
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2978
     'hello:world:isnt:this nice' asCollectionOfSubstringsSeparatedByAny:':'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2979
     'hello:world:isnt:this nice' asCollectionOfSubstringsSeparatedByAny:(Array with:$: with:Character space)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2980
     'hello:world:isnt:this nice' asCollectionOfSubstringsSeparatedByAny:': '
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2981
     'h1e2l3l4o' asCollectionOfSubstringsSeparatedByAny:($1 to: $9)
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2982
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2983
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2984
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2985
asCollectionOfWords
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2986
    "return a collection containing the words (separated by whitespace)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2987
     of the receiver. Multiple occurrences of whitespace characters will
17517
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
  2988
     be treated like one - i.e. whitespace is skipped.
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
  2989
     (sigh: it is called #'subStrings' in V'Age, and #'substrings' in Squeak) "
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2990
7797
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2991
    |words|
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2992
11905
cbc2191cfe2d return stringCollections from asCollectionOfXXX
Claus Gittinger <cg@exept.de>
parents: 11904
diff changeset
  2993
    words := StringCollection new.
7797
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2994
    self asCollectionOfWordsDo:[:w | words add:w].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2995
    ^ words
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2996
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
     'hello world isnt this nice' asCollectionOfWords
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2999
     '    hello    world   isnt   this   nice  ' asCollectionOfWords
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3000
     'hello' asCollectionOfWords
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3001
     '' asCollectionOfWords
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3002
     '      ' asCollectionOfWords
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3003
     ' foo bar__baz__bla__ bar ' asCollectionOfWords
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3004
     ' foo __bar__baz__bla__ bar ' asCollectionOfWords
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3005
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3006
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3007
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3008
asCollectionOfWordsDo:aBlock
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3009
    "evaluate aBlock for each word (separated by whitespace) of the receiver.
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3010
     Multiple occurrences of whitespace characters will be treated like one
7797
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  3011
     - i.e. whitespace is skipped.
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  3012
     Returns the number of words (i.e. the number of invocations of aBlock)."
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  3013
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  3014
    |count  "{ Class:SmallInteger }"
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3015
     start  "{ Class:SmallInteger }"
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3016
     stop   "{ Class:SmallInteger }"
7797
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  3017
     mySize "{ Class:SmallInteger }"|
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  3018
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  3019
    count := 0.
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  3020
    start := 1.
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  3021
    mySize := self size.
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  3022
    [start <= mySize] whileTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3023
	start := self indexOfNonSeparatorStartingAt:start.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3024
	start == 0 ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3025
	    ^ count
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3026
	].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3027
	stop := self indexOfSeparatorStartingAt:start.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3028
	stop == 0 ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3029
	    aBlock value:(self copyFrom:start to:mySize).
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3030
	    ^ count + 1
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3031
	].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3032
	aBlock value:(self copyFrom:start to:(stop - 1)).
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3033
	start := stop.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3034
	count := count + 1
7797
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  3035
    ].
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  3036
    ^ count
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  3037
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  3038
    "
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  3039
     'hello world isnt this nice' asCollectionOfWordsDo:[:w | Transcript showCR:w]
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  3040
     '    hello    world   isnt   this   nice  ' asCollectionOfWordsDo:[:w | Transcript showCR:w]
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  3041
     'hello' asCollectionOfWordsDo:[:w | Transcript showCR:w]
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  3042
     '' asCollectionOfWordsDo:[:w | Transcript showCR:w]
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  3043
     '      ' asCollectionOfWordsDo:[:w | Transcript showCR:w]
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
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
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3047
asFilename
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3048
    "return a Filename with pathname taken from the receiver"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3049
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3050
    ^ Filename named:self "(self asSingleByteStringReplaceInvalidWith:$?)"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3051
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3052
    "Modified: 20.5.1996 / 09:38:15 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3053
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3054
3060
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3055
asFixedPoint
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3056
    "read a fixedPoint number from the receiver.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3057
     Notice, that errors may occur during the read,
7423
5b25b8e82453 comments
Claus Gittinger <cg@exept.de>
parents: 7422
diff changeset
  3058
     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
  3059
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3060
    ^ FixedPoint readFromString:self
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3061
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3062
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3063
     '0.123' asFixedPoint
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3064
     '12345' asFixedPoint
3060
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3065
     '(1/5)' asFixedPoint
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3066
     'foo' asFixedPoint
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3067
     Object errorSignal handle:[:ex | ex return:0] do:['foo' asFixedPoint]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3068
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3069
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3070
    "Modified: / 25.10.1997 / 15:19:00 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3071
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3072
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3073
asFixedPoint:scale
3060
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3074
    "read a fixedPoint number with scale number of post-decimal digits
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3075
     from the receiver. Scale controls the number of displayed digits,
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3076
     not the number of actually valid digits.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3077
     Notice, that errors may occur during the read,
7423
5b25b8e82453 comments
Claus Gittinger <cg@exept.de>
parents: 7422
diff changeset
  3078
     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
  3079
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3080
    ^ (FixedPoint readFromString:self) scale:scale
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3081
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3082
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3083
     '0.123' asFixedPoint:2
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3084
     '123456' asFixedPoint:2
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3085
     ('3.14157' asFixedPoint:1) asFixedPoint:5
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3086
     '3.14157' asFixedPoint:2
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3087
     'foo' asFixedPoint:2
3060
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3088
    "
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3089
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3090
    "Modified: / 25.10.1997 / 15:21:57 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3091
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3092
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3093
asFloat
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3094
    "read a float number from the receiver.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3095
     Notice, that errors may occur during the read,
7422
200486204923 comments
Claus Gittinger <cg@exept.de>
parents: 7421
diff changeset
  3096
     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
  3097
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3098
    ^ (Number readFromString:self) asFloat
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3099
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3100
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3101
     '0.123' asFloat
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3102
     '12345' asFloat
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3103
     '(1/5)' asFloat
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3104
     Object errorSignal handle:[:ex | ex return:0] do:['foo' asFloat]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3105
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3106
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3107
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3108
asInteger
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3109
    "convert the receiver into an integer.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3110
     Notice, that errors may occur during the read,
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3111
     so you better setup some exception handler when using this method.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3112
     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
  3113
     in other smalltalks.
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3114
     For less strict integer reading, use Integer readFrom:aString"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3115
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3116
    ^ Integer readFromString:self
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3117
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3118
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3119
     '12345678901234567890' asInteger
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3120
     '-1234' asInteger
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3121
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3122
     The following raises an error:
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3123
	 '0.123' asInteger              <- reader finds more after reading 0
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3124
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3125
     whereas the less strict readFrom does not:
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3126
	 Integer readFrom:'0.123'       <- reader stops at ., returning 0
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3127
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3128
     '0.123' asInteger
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3129
     '0.123' asNumber    <- returns what you expect
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3130
     Object errorSignal handle:[:ex | ex return:0] do:['foo' asInteger]
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3131
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3132
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3133
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3134
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3135
asLowercase
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3136
    "return a copy of myself in lowercase letters"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3137
8003
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3138
    |newStr c bitsPerCharacter
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3139
     mySize "{ Class: SmallInteger }" |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3140
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3141
    mySize := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3142
    mySize == 0 ifTrue:[^ self].
18657
fee4d5739a73 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18612
diff changeset
  3143
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3144
    newStr := self species new:mySize.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3145
    bitsPerCharacter := newStr bitsPerCharacter.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3146
18657
fee4d5739a73 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18612
diff changeset
  3147
    "/ handle the very seldom case of an uppercase char which needs
fee4d5739a73 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18612
diff changeset
  3148
    "/ more bits in its lowercase variant 
fee4d5739a73 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18612
diff changeset
  3149
    "/ (there are only a few of them)
fee4d5739a73 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18612
diff changeset
  3150
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3151
    1 to:mySize do:[:i |
18657
fee4d5739a73 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18612
diff changeset
  3152
        c := (self at:i) asLowercase.
fee4d5739a73 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18612
diff changeset
  3153
        (c bitsPerCharacter > bitsPerCharacter
fee4d5739a73 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18612
diff changeset
  3154
         and:[c stringSpecies ~= newStr stringSpecies]) ifTrue:[
fee4d5739a73 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18612
diff changeset
  3155
            newStr := c stringSpecies fromString:newStr.
18662
3ad440593060 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18657
diff changeset
  3156
            bitsPerCharacter := newStr bitsPerCharacter.
18657
fee4d5739a73 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18612
diff changeset
  3157
        ].
fee4d5739a73 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18612
diff changeset
  3158
        newStr at:i put:c
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3159
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3160
    ^ newStr
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
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3163
     'HelloWorld' asLowercase
18662
3ad440593060 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18657
diff changeset
  3164
     'HelloWorld' asUnicode16String asLowercase
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3165
     'HelloWorld' asLowercaseFirst
18657
fee4d5739a73 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18612
diff changeset
  3166
     'HelloWorld' asUppercase
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3167
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3168
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3169
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3170
asLowercaseFirst
17508
8fe97d926c7d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17486
diff changeset
  3171
    "return a copy of myself where the first character is converted to lowercase.
8fe97d926c7d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17486
diff changeset
  3172
     If the first character is already lowercase, or there is no uppercase for it, return the
8fe97d926c7d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17486
diff changeset
  3173
     receiver."
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3174
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3175
    |newString firstChar firstCharAsLowercase|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3176
11525
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
  3177
    self isEmpty ifTrue:[^ self].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3178
    firstChar := (self at:1).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3179
    firstCharAsLowercase := firstChar asLowercase.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3180
    firstChar == firstCharAsLowercase ifTrue:[ ^ self].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3181
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3182
    firstCharAsLowercase bitsPerCharacter > self bitsPerCharacter ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3183
	newString := firstCharAsLowercase stringSpecies fromString:self.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3184
    ] ifFalse:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3185
	newString := self stringSpecies fromString:self.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3186
    ].
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3187
    newString at:1 put:firstCharAsLowercase.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3188
    ^ newString
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3189
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3190
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3191
     'HelloWorld' asLowercase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3192
     'HelloWorld' asLowercaseFirst
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3193
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3194
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3195
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3196
asLowercaseLast
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3197
    "return a copy of myself where the last character is
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3198
     converted to lowercase."
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3199
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3200
    |newString sz|
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3201
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3202
    sz := self size.
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3203
    newString := self copyFrom:1 to:sz.
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3204
    sz > 0 ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3205
	newString at:sz put:(newString at:sz) asLowercase
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3206
    ].
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3207
    ^ newString
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3208
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3209
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3210
     'HelloWorld' asLowercase
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3211
     'HelloWorlD' asLowercaseLast
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3212
    "
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3213
!
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3214
17644
db81a12ac65d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17625
diff changeset
  3215
asMutator
db81a12ac65d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17625
diff changeset
  3216
    "return a corresponding setter method's selector"
db81a12ac65d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17625
diff changeset
  3217
db81a12ac65d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17625
diff changeset
  3218
    ^ (self asOneByteString,':') asSymbol
db81a12ac65d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17625
diff changeset
  3219
!
db81a12ac65d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17625
diff changeset
  3220
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3221
asNumber
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3222
    "read a number from the receiver.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3223
     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
  3224
     so you better setup some signal handler when using this method.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3225
     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
  3226
     it does not handle smalltalk numbers (i.e. radix).
c6396149df08 comment
Claus Gittinger <cg@exept.de>
parents: 9087
diff changeset
  3227
     To read a smalltalk number, use Number >> readSmalltalkFrom:.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3228
     This may change if ANSI specifies it."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3229
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3230
"/ ST-80 behavior:
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3231
"/  ^ Number readFromString:self onError:0
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3232
17061
c1de9e428073 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17043
diff changeset
  3233
    ^ Number fromString:self
c1de9e428073 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17043
diff changeset
  3234
c1de9e428073 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17043
diff changeset
  3235
    "
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3236
     '123'     asNumber
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3237
     '123.567' asNumber
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3238
     '(5/6)'   asNumber
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3239
     'foo'     asNumber
17061
c1de9e428073 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17043
diff changeset
  3240
     '123a'    asNumber
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3241
     Object errorSignal handle:[:ex | ex returnWith:0] do:['foo' asNumber]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3242
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3243
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3244
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3245
asNumberFromFormatString:ignored
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3246
    "read a number from the receiver, ignoring any nonDigit characters.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3247
     This is typically used to convert from strings which include
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3248
     dollar-signs or millenium digits. However, this method also ignores
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3249
     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
  3250
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3251
    |tempString|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3252
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3253
    tempString := self collect:[:char | char isDigit].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3254
    ^ Number readFromString:tempString onError:0
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3255
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3256
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3257
     'USD 123' asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3258
     'DM 123'  asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3259
     '123'     asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3260
     '123.567' asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3261
     '(5/6)'   asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3262
     'foo'     asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3263
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3264
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3265
7977
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  3266
asSingleByteStringIfPossible
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  3267
    "if possible, return the receiver converted to a 'normal' string.
18181
f180c4847ddc class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18172
diff changeset
  3268
     It is only possible, if there are no characters with codePoints above 255 in the receiver.
f180c4847ddc class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18172
diff changeset
  3269
     If not possible, the (wideString) receiver is returned."
7977
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  3270
14555
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  3271
    self isWideString ifFalse:[^ self].
8102
e0537422e2d3 Use the ANSI-blessed #codePoint instead of deprecated #asciiValue
Stefan Vogel <sv@exept.de>
parents: 8083
diff changeset
  3272
    (self contains:[:char | char codePoint > 255]) ifFalse:[^ self asSingleByteString].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3273
    ^ self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3274
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3275
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3276
     'hello' asSingleByteStringIfPossible
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3277
     'hello' asUnicodeString asSingleByteStringIfPossible
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3278
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3279
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3280
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3281
asSingleByteStringReplaceInvalidWith:replacementCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3282
    "return the receiver converted to a 'normal' string,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3283
     with invalid characters replaced by replacementCharacter.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3284
     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
  3285
     and replace characters above code-255 with some replacement."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3286
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3287
    |newString|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3288
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3289
    newString := String new:(self size).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3290
    1 to:self size do:[:idx |
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3291
	|char|
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3292
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3293
	char := self at:idx.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3294
	char codePoint <= 16rFF ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3295
	    newString at:idx put:char
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3296
	] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3297
	    newString at:idx put:replacementCharacter
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3298
	].
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3299
    ].
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3300
    ^ newString
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3301
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3302
    "Created: 30.6.1997 / 13:02:14 / cg"
7977
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  3303
!
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  3304
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3305
asString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3306
    "return myself - I am a string"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3307
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3308
    ^ self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3309
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3310
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3311
asStringCollection
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3312
    "return a collection of lines from myself."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3313
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3314
    ^ StringCollection fromString:self "string"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3315
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3316
    "Modified: 13.5.1996 / 20:36:59 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3317
!
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3318
1434
a317ba02d685 allow aText asSymbol
Claus Gittinger <cg@exept.de>
parents: 1429
diff changeset
  3319
asSymbol
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  3320
    "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
  3321
     The receiver must be a singleByte-String.
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  3322
     TwoByte- and FourByteSymbols are (currently ?) not allowed."
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  3323
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  3324
    |str|
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  3325
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3326
    str := self string.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3327
    str ~~ self ifTrue:[ ^ str asSymbol ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3328
    ^ self asSingleByteString asSymbol
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3329
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3330
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3331
asSymbolIfInterned
17183
f86492476cc5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17165
diff changeset
  3332
    "If a symbol with the receiver's characters is already known, return it. Otherwise, return nil.
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  3333
     This can be used to query for an existing symbol and is the same as:
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3334
	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
  3335
     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
  3336
     The receiver must be a singleByte-String.
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  3337
     TwoByte- and FourByteSymbols are (currently ?) not allowed."
1435
3ee1fde2aa58 allow asSymbolIfInterned for Texts
Claus Gittinger <cg@exept.de>
parents: 1434
diff changeset
  3338
6642
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  3339
    |s|
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  3340
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  3341
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  3342
    s := self string.
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  3343
    s ~~ self ifTrue:[
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  3344
       ^ s asSymbolIfInterned
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  3345
    ].
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  3346
    ^ nil.
1435
3ee1fde2aa58 allow asSymbolIfInterned for Texts
Claus Gittinger <cg@exept.de>
parents: 1434
diff changeset
  3347
3ee1fde2aa58 allow asSymbolIfInterned for Texts
Claus Gittinger <cg@exept.de>
parents: 1434
diff changeset
  3348
    "Created: 22.5.1996 / 16:37:04 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3349
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3350
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3351
asText
9403
ba6ca2bcfe10 documentation
Stefan Vogel <sv@exept.de>
parents: 9391
diff changeset
  3352
    "return a Text-object (string with emphasis) from myself."
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3353
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3354
    "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
  3355
    Text isNil ifTrue:[^ self].
17065
9ed49d70737a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17061
diff changeset
  3356
    ^ Text string:self
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3357
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3358
    "Created: 12.5.1996 / 10:41:14 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3359
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3360
17021
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3361
asTimestamp
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3362
    "convert the receiver into an Timestamp.
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3363
     Notice, that errors may occur during the read,
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3364
     so you better setup some exception handler when using this method."
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3365
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3366
    ^ Timestamp readFromString:self
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3367
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3368
    "
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3369
     '2014-11-10 21:30:22.444' asTimestamp
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3370
     '2014-11-10 21:30:22.444Z' asTimestamp
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3371
     '2014-11-10 21:30:22.444+0200' asTimestamp
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3372
    "
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3373
!
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3374
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3375
asTitlecase
8027
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3376
    "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
  3377
     and everything else to lowercase.
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3378
     See the comment in Character on what titlecase is."
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3379
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3380
    |newStr c bitsPerCharacter
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3381
     mySize "{ Class: SmallInteger }" |
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3382
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3383
    mySize := self size.
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3384
    newStr := self species new:mySize.
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3385
    bitsPerCharacter := newStr bitsPerCharacter.
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3386
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3387
    1 to:mySize do:[:i |
18662
3ad440593060 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18657
diff changeset
  3388
        i == 1 ifTrue:[
3ad440593060 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18657
diff changeset
  3389
            c := (self at:i) asTitlecase.
3ad440593060 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18657
diff changeset
  3390
        ] ifFalse:[
3ad440593060 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18657
diff changeset
  3391
            c := (self at:i) asLowercase.
3ad440593060 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18657
diff changeset
  3392
        ].
3ad440593060 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18657
diff changeset
  3393
        c bitsPerCharacter > bitsPerCharacter ifTrue:[
3ad440593060 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18657
diff changeset
  3394
            newStr := c stringSpecies fromString:newStr.
3ad440593060 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18657
diff changeset
  3395
            bitsPerCharacter := newStr bitsPerCharacter.
3ad440593060 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18657
diff changeset
  3396
        ].
3ad440593060 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18657
diff changeset
  3397
        newStr at:i put:c
8027
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3398
    ].
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3399
    ^ newStr
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3400
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3401
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3402
     'helloWorld' asTitlecase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3403
     'HelloWorld' asTitlecase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3404
     'HELLOWORLD' asTitlecase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3405
     'helloworld' asTitlecase
8027
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3406
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3407
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3408
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3409
asTitlecaseFirst
8023
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3410
    "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
  3411
     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
  3412
     (2-character glyphs), which consist of an upper- and lower-case characters.
93db40068fba comment
Claus Gittinger <cg@exept.de>
parents: 8023
diff changeset
  3413
     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
  3414
     receiver."
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3415
8026
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  3416
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3417
     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
  3418
     (Let us write this compound character using ASCII as 'dz'.)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3419
     This character uppercases to character U+01F1, LATIN CAPITAL LETTER DZ.
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3420
     (Which is basically 'DZ'.)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3421
     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
  3422
     (Which we can write 'Dz'.)
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  3423
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  3424
      character uppercase titlecase
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  3425
      --------- --------- ---------
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  3426
      dz        DZ        Dz
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  3427
    "
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  3428
8023
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3429
    |newString firstChar firstCharAsTitlecase|
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3430
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3431
    firstChar := (self at:1).
8025
04d9b6ef3012 comments
Claus Gittinger <cg@exept.de>
parents: 8024
diff changeset
  3432
    firstCharAsTitlecase := firstChar asTitlecase.
8023
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3433
    firstChar == firstCharAsTitlecase ifTrue:[ ^ self].
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  3434
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  3435
    firstCharAsTitlecase bitsPerCharacter > self bitsPerCharacter ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3436
	newString := firstCharAsTitlecase stringSpecies fromString:self.
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  3437
    ] ifFalse:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3438
	newString := self stringSpecies fromString:self.
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  3439
    ].
8023
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3440
    newString at:1 put:firstCharAsTitlecase.
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3441
    ^ newString
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3442
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3443
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3444
     'helloWorld' asTitlecaseFirst
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3445
     'HelloWorld' asTitlecaseFirst
8023
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3446
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3447
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3448
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3449
asTwoByteString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3450
    "return the receiver converted to a two-byte string.
16051
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  3451
     Will be obsolete soon - use asUnicode16String."
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3452
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3453
    ^ TwoByteString fromString:self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3454
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3455
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3456
asURI
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3457
    "return an URI with string taken from the receiver"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3458
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3459
    ^ URI fromString:self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3460
!
8710
Stefan Vogel <sv@exept.de>
parents: 8646
diff changeset
  3461
5776
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  3462
asURL
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  3463
    "return an URL-object from myself."
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  3464
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  3465
    ^ URL fromString:self
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  3466
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  3467
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3468
     'http://www.exept.de:80/index.html' asURL host
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3469
     'http://www.exept.de:80/index.html' asURL port
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3470
     'http://www.exept.de:80/index.html' asURL method
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3471
     'http://www.exept.de:80/index.html' asURL path
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3472
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3473
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3474
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3475
asUnicode16String
15035
ecbb70df7a5c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14993
diff changeset
  3476
    "return the receiver in a two-byte per character representation.
ecbb70df7a5c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14993
diff changeset
  3477
     Normally, the internal ST/X representation should be transparent and not
ecbb70df7a5c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14993
diff changeset
  3478
     of the programmer's concern; except when strings are passed to the outside world,
ecbb70df7a5c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14993
diff changeset
  3479
     such as wide-string ffi calls or file contents."
ecbb70df7a5c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14993
diff changeset
  3480
17600
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3481
     |sz|
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3482
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3483
     sz := self size.
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3484
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3485
     ^ (Unicode16String new:sz)
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3486
	   replaceFrom:1 to:sz with:self startingAt:1;
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3487
	   yourself.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3488
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3489
    "
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3490
	'abc' asUnicode16String
17600
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3491
    "
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3492
!
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3493
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3494
asUnicode16StringZ
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3495
    "return the receiver in a two-byte per character representation.
17625
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  3496
     Make sure that is zero terminated (last char is 16r0000).
17600
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3497
     Normally, the internal ST/X representation should be transparent and not
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3498
     of the programmer's concern; except when strings are passed to the outside world,
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3499
     such as wide-string ffi calls or file contents."
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3500
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3501
     |sz|
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3502
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3503
     sz := self size.
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3504
     (self at:sz) == (Character codePoint:0) ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3505
	 ^ self asUnicode16String.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3506
     ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3507
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3508
     ^ (Unicode16String new:sz+1)
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3509
	   replaceFrom:1 to:sz with:self startingAt:1;
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3510
	   at:sz+1 put:(Character codePoint:0);
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3511
	   yourself.
17600
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3512
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3513
     "
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3514
	'abc' asUnicode16StringZ
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3515
	'abc' asUnicode16String asUnicode16StringZ
17600
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3516
     "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3517
!
8295
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3518
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3519
asUnicode32String
16051
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  3520
    "return the receiver in a four-byte per character representation.
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  3521
     Normally, the internal ST/X representation should be transparent and not
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  3522
     of the programmer's concern; except when strings are passed to the outside world,
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  3523
     such as wide-string ffi calls or file contents."
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  3524
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  3525
    ^ self as:Unicode32String
8295
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3526
!
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3527
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3528
asUnicodeString
16051
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  3529
    "return the receiver in a two-byte per character representation.
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  3530
     Normally, the internal ST/X representation should be transparent and not
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  3531
     of the programmer's concern; except when strings are passed to the outside world,
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  3532
     such as wide-string ffi calls or file contents."
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  3533
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  3534
    ^ self asUnicode16String
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  3535
    "
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  3536
     'Hello World' asUnicodeString
14141
e86d245213b0 comment/format in: #asUnicodeString
Stefan Vogel <sv@exept.de>
parents: 14137
diff changeset
  3537
    "
8295
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3538
!
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3539
13073
19261a5b4430 added: #asUnixFilename
Claus Gittinger <cg@exept.de>
parents: 13050
diff changeset
  3540
asUnixFilename
19261a5b4430 added: #asUnixFilename
Claus Gittinger <cg@exept.de>
parents: 13050
diff changeset
  3541
    "return a UnixFilename with pathname taken from the receiver"
19261a5b4430 added: #asUnixFilename
Claus Gittinger <cg@exept.de>
parents: 13050
diff changeset
  3542
19261a5b4430 added: #asUnixFilename
Claus Gittinger <cg@exept.de>
parents: 13050
diff changeset
  3543
    ^ UnixFilename named:self
19261a5b4430 added: #asUnixFilename
Claus Gittinger <cg@exept.de>
parents: 13050
diff changeset
  3544
19261a5b4430 added: #asUnixFilename
Claus Gittinger <cg@exept.de>
parents: 13050
diff changeset
  3545
    "Created: / 20-09-2010 / 21:42:55 / cg"
19261a5b4430 added: #asUnixFilename
Claus Gittinger <cg@exept.de>
parents: 13050
diff changeset
  3546
!
19261a5b4430 added: #asUnixFilename
Claus Gittinger <cg@exept.de>
parents: 13050
diff changeset
  3547
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3548
asUppercase
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3549
    "return a copy of myself in uppercase letters"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3550
8003
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3551
    |newStr c bitsPerCharacter
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3552
     mySize "{ Class: SmallInteger }" |
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3553
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3554
    mySize := self size.
8954
12e701d7b5ac allow for receiver to be empty in asLowercase and asUppercase.
Claus Gittinger <cg@exept.de>
parents: 8938
diff changeset
  3555
    mySize == 0 ifTrue:[^ self].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3556
    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
  3557
    bitsPerCharacter := newStr bitsPerCharacter.
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3558
18657
fee4d5739a73 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18612
diff changeset
  3559
    "/ handle the very seldom case of a lowercase char which needs
fee4d5739a73 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18612
diff changeset
  3560
    "/ more bits in its uppercase variant 
fee4d5739a73 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18612
diff changeset
  3561
    "/ (there are only a few of them)
fee4d5739a73 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18612
diff changeset
  3562
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3563
    1 to:mySize do:[:i |
18657
fee4d5739a73 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18612
diff changeset
  3564
        c := (self at:i) asUppercase.
fee4d5739a73 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18612
diff changeset
  3565
        c bitsPerCharacter > bitsPerCharacter ifTrue:[
fee4d5739a73 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18612
diff changeset
  3566
            newStr := c stringSpecies fromString:newStr.
18662
3ad440593060 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18657
diff changeset
  3567
            bitsPerCharacter := newStr bitsPerCharacter.
18657
fee4d5739a73 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18612
diff changeset
  3568
        ].
fee4d5739a73 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18612
diff changeset
  3569
        newStr at:i put:c
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3570
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3571
    ^ newStr
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3572
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3573
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3574
     'helloWorld' asUppercase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3575
     'helloWorld' asUppercaseFirst
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3576
     (Character value:16rB5) asString asUppercase   -- needs 16 bits !!
18657
fee4d5739a73 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18612
diff changeset
  3577
     (Character value:16rFF) asString asUppercase   -- needs 16 bits !!
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3578
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3579
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3580
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3581
asUppercaseFirst
8003
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3582
    "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
  3583
     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
  3584
     receiver."
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3585
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3586
    |newString firstChar firstCharAsUppercase|
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3587
12679
18c4eabbb673 changed: #asUppercaseFirst
Claus Gittinger <cg@exept.de>
parents: 12665
diff changeset
  3588
    self isEmpty ifTrue:[^ self].
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3589
    firstChar := self at:1.
8003
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3590
    firstCharAsUppercase := firstChar asUppercase.
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3591
    firstChar == firstCharAsUppercase ifTrue:[ ^ self].
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3592
12679
18c4eabbb673 changed: #asUppercaseFirst
Claus Gittinger <cg@exept.de>
parents: 12665
diff changeset
  3593
    "/ 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
  3594
    firstCharAsUppercase bitsPerCharacter > self bitsPerCharacter ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3595
	newString := firstCharAsUppercase stringSpecies fromString:self.
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  3596
    ] ifFalse:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3597
	newString := self stringSpecies fromString:self.
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  3598
    ].
8003
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3599
    newString at:1 put:firstCharAsUppercase.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3600
    ^ newString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3601
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3602
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3603
     'helloWorld' asUppercase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3604
     'helloWorld' asUppercaseFirst
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3605
     'HelloWorld' asUppercaseFirst
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3606
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3607
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3608
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3609
asUppercaseLast
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3610
    "return a copy of myself where the last character is
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3611
     converted to uppercase."
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3612
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3613
    |newString sz|
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3614
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3615
    sz := self size.
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3616
    newString := self copyFrom:1 to:sz.
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3617
    sz > 0 ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3618
	newString at:sz put:(newString at:sz) asUppercase
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3619
    ].
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3620
    ^ newString
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3621
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3622
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3623
     'HelloWorld' asUppercase
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3624
     'HelloWorld' asUppercaseLast
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3625
    "
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3626
!
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3627
17021
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3628
asUtcTimestamp
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3629
    "convert the receiver into an UtcTimestamp (Time is interpreted in the UTC timezone).
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3630
     Notice, that errors may occur during the read,
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3631
     so you better setup some exception handler when using this method."
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3632
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3633
    ^ UtcTimestamp readFromString:self
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3634
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3635
    "
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3636
     '2014-11-10 21:30:22.444' asUtcTimestamp
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3637
    "
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3638
!
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3639
11062
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3640
literalArrayEncoding
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3641
    "encode myself as an array literal, from which a copy of the receiver
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3642
     can be reconstructed with #decodeAsLiteralArray."
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3643
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3644
    ^ self
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3645
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3646
    "Modified: 1.9.1995 / 02:25:45 / claus"
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3647
    "Modified: 22.4.1996 / 13:00:50 / cg"
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3648
!
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3649
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3650
string
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3651
    "return the receiver - for ST-80 compatibility"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3652
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3653
    ^ self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3654
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3655
    "Modified: 27.4.1996 / 13:29:30 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3656
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3657
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3658
!CharacterArray methodsFor:'copying'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3659
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3660
, aStringOrCharacter
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3661
    "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
  3662
     This is nonStandard, but convenient"
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3663
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3664
    |myWidth otherWidth|
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3665
1050
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3666
    aStringOrCharacter isCharacter ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3667
	^ self copyWith:aStringOrCharacter
1050
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3668
    ].
1396
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3669
    aStringOrCharacter isText ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3670
	^ aStringOrCharacter concatenateFromString:self
1396
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3671
    ].
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3672
    aStringOrCharacter isString ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3673
	(otherWidth := aStringOrCharacter bitsPerCharacter) ~~ (myWidth := self bitsPerCharacter) ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3674
	    otherWidth > myWidth ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3675
		^ (aStringOrCharacter species fromString:self) , aStringOrCharacter
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3676
	    ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3677
	    ^ self , (self species fromString:aStringOrCharacter)
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3678
	].
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3679
    ].
1050
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3680
    ^ super , aStringOrCharacter
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3681
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3682
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3683
     'hello' , $1
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3684
     'hello' , '1'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3685
     'hello' , (' world' asText allBold)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3686
     'hello' , (JISEncodedString fromString:' world')
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3687
     (JISEncodedString fromString:'hello') , ' world'
1411
a3b3ab3044c6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1396
diff changeset
  3688
1422
9a0b792f2953 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1411
diff changeset
  3689
     Transcript showCR:
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3690
	 (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
  3691
    "
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3692
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3693
    "Modified: 28.6.1997 / 00:13:17 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3694
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3695
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3696
,, aString
7020
f51001115a54 comment
penk
parents: 6998
diff changeset
  3697
    "concatenate with a newLine in between"
6965
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3698
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3699
    ^ (self copyWith:Character cr) , aString
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3700
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3701
   "
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3702
     hello ,, world
7020
f51001115a54 comment
penk
parents: 6998
diff changeset
  3703
     'hello' ,, 'world'
6965
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3704
   "
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3705
!
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3706
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3707
chopTo:maxLen
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3708
    "if the receivers size is less or equal to maxLen, return it.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3709
     Otherwise, return a copy of the receiver, where some characters
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3710
     in the middle have been removed for a total string length
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3711
     of maxLen."
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3712
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3713
    |sz n1 n2|
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3714
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3715
    (sz := self size) <= maxLen ifTrue:[ ^ self ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3716
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3717
    n1 := n2 := maxLen // 2.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3718
    maxLen odd ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3719
	n2 := n1 + 1
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3720
    ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3721
    ^ (self copyFrom:1 to:n1) , (self copyFrom:sz - n2 + 1)
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3722
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3723
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3724
     '12345678901234'   chopTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3725
     '123456789012345'  chopTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3726
     '1234567890123456' chopTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3727
     'aShortString' chopTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3728
     'aVeryLongNameForAStringThatShouldBeShortened' chopTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3729
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3730
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3731
    "Modified: / 24-10-2006 / 12:32:01 / cg"
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3732
!
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3733
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3734
concatenate:string1 and:string2
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3735
    "return the concatenation of myself and the arguments, string1 and string2.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3736
     This is equivalent to self , string1 , string2
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3737
     - 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
  3738
     is known to be a string."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3739
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3740
    ^ self , string1 , string2
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3741
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3742
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3743
concatenate:string1 and:string2 and:string3
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3744
    "return the concatenation of myself and the string arguments.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3745
     This is equivalent to self , string1 , string2 , string3
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3746
     - 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
  3747
     is known to be a string."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3748
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3749
    ^ self , string1 , string2 , string3
8040
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3750
!
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3751
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3752
contractAtBeginningTo:maxLen
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3753
    "if the receivers size is less or equal to maxLen, return it.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3754
     Otherwise, return a copy of the receiver, where some characters
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3755
     at the beginning have been replaced by '...' for a total string length
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3756
     of maxLen. Can be used to abbreviate long entries in tables."
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3757
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3758
    |sz|
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3759
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3760
    (sz := self size) <= maxLen ifTrue:[ ^ self ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3761
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3762
    ^ '...' , (self copyFrom:(sz - (maxLen - 4)))
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3763
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3764
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3765
     '12345678901234' contractAtBeginningTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3766
     '123456789012345' contractAtBeginningTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3767
     '1234567890123456' contractAtBeginningTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3768
     'aShortString' contractAtBeginningTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3769
     'aVeryLongNameForAStringThatShouldBeShortened' contractAtBeginningTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3770
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3771
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3772
    "Modified: / 24-10-2006 / 12:32:13 / cg"
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3773
!
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3774
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3775
contractAtEndTo:maxLen
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3776
    "if the receivers size is less or equal to maxLen, return it.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3777
     Otherwise, return a copy of the receiver, where some characters
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3778
     at the end have been replaced by '...' for a total string length
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3779
     of maxLen. Can be used to abbreviate long entries in tables."
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3780
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3781
    |sz|
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3782
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3783
    (sz := self size) <= maxLen ifTrue:[ ^ self ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3784
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3785
    ^ (self copyTo:maxLen-3),'...'
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3786
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3787
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3788
     '12345678901234' contractAtEndTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3789
     '123456789012345' contractAtEndTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3790
     '1234567890123456' contractAtEndTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3791
     'aShortString' contractAtEndTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3792
     'aVeryLongNameForAStringThatShouldBeShortened' contractAtEndTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3793
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3794
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3795
    "Modified: / 24-10-2006 / 12:32:26 / cg"
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3796
!
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3797
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3798
contractLeftTo:maxLen
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3799
    "if the receivers size is less or equal to maxLen, return it.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3800
     Otherwise, return a copy of the receiver, where some characters
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3801
     near the first quarter have been replaced by '...' for a total string length
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3802
     of maxLen.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3803
     Very similar to contractTo:, but better to abbreviate long filename entries,
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3804
     where the right part is of more use than the left."
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3805
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3806
    |sz "{ SmallInteger }"
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3807
     halfSize quarterSize "{ SmallInteger }"
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3808
     leftEnd rightEnd rightStart|
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3809
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3810
    (sz := self size) <= maxLen ifTrue:[ ^ self ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3811
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3812
    halfSize := maxLen // 2.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3813
    quarterSize := maxLen // 4.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3814
    leftEnd := quarterSize-1.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3815
    rightEnd := maxLen - leftEnd - 3.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3816
    rightStart := sz - rightEnd + 1.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3817
    ^ (self copyTo:leftEnd),'...',(self copyFrom:rightStart)
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3818
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3819
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3820
     '12345678901234' contractLeftTo:15
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3821
     '123456789012345' contractLeftTo:15
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3822
     '1234567890123456' contractLeftTo:15
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3823
     'aShortString' contractLeftTo:15
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3824
     'aVeryLongNameForAStringThatShouldBeShortened' contractLeftTo:15
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3825
     '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
  3826
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3827
!
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3828
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3829
contractTo:maxLen
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3830
    "if the receivers size is less or equal to maxLen, return it.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3831
     Otherwise, return a copy of the receiver, where some characters
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3832
     in the middle have been replaced by '...' for a total string length
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3833
     of maxLen. Can be used to abbreviate long entries in tables."
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3834
13362
ee643208df42 changed: #contractTo:
Claus Gittinger <cg@exept.de>
parents: 13344
diff changeset
  3835
    |sz "{ SmallInteger }" leftSize rightSize|
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3836
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3837
    (sz := self size) <= maxLen ifTrue:[ ^ self ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3838
13362
ee643208df42 changed: #contractTo:
Claus Gittinger <cg@exept.de>
parents: 13344
diff changeset
  3839
    rightSize := maxLen // 2.
ee643208df42 changed: #contractTo:
Claus Gittinger <cg@exept.de>
parents: 13344
diff changeset
  3840
    leftSize := maxLen - rightSize.
13822
8c2b90928dd9 contractTo:
Claus Gittinger <cg@exept.de>
parents: 13633
diff changeset
  3841
    leftSize := leftSize - 2.
8c2b90928dd9 contractTo:
Claus Gittinger <cg@exept.de>
parents: 13633
diff changeset
  3842
    rightSize := rightSize - 1.
13362
ee643208df42 changed: #contractTo:
Claus Gittinger <cg@exept.de>
parents: 13344
diff changeset
  3843
    ^ (self copyTo:leftSize),'...',(self copyFrom:(sz+1-rightSize))
ee643208df42 changed: #contractTo:
Claus Gittinger <cg@exept.de>
parents: 13344
diff changeset
  3844
ee643208df42 changed: #contractTo:
Claus Gittinger <cg@exept.de>
parents: 13344
diff changeset
  3845
    "
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3846
     '12345678901234' contractTo:15
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3847
     '123456789012345' contractTo:15
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3848
     '1234567890123456' contractTo:15
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3849
     '12345678901234567' contractTo:15
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3850
     '123456789012345678' contractTo:15
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3851
     'aShortString' contractTo:15
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3852
     'aVeryLongNameForAStringThatShouldBeShortened' contractTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3853
     'C:\Dokumente und Einstellungen\cg\work\bosch\dapas\hw_schnittstellen\DAPAS__HpibDLL.st' contractTo:40
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3854
     ('1234567890123456789012345678901234567' contractTo:30) size
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3855
     ('1234567890123456789012345678901234567' contractTo:29) size
13362
ee643208df42 changed: #contractTo:
Claus Gittinger <cg@exept.de>
parents: 13344
diff changeset
  3856
    "
ee643208df42 changed: #contractTo:
Claus Gittinger <cg@exept.de>
parents: 13344
diff changeset
  3857
13822
8c2b90928dd9 contractTo:
Claus Gittinger <cg@exept.de>
parents: 13633
diff changeset
  3858
    "Modified (comment): / 24-11-2011 / 19:17:46 / cg"
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3859
!
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3860
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3861
copyReplaceAll:oldElement with:newElement
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3862
    "return a copy of the receiver as a string, where all elements equal to oldElement
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3863
     have been replaced by newElement."
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3864
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3865
    "/ ANSI seems to allow a sequence to be replaced by another sequence,
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3866
    "/ whereas the old ST80 meant replace all occurrences... - sigh.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3867
    oldElement isByteCollection ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3868
	newElement isByteCollection ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3869
	    ^ self copyReplaceString:oldElement withString:newElement.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3870
	].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3871
	self halt:'check if this is legal'.
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3872
    ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3873
    newElement isByteCollection ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3874
	self halt:'check if this is legal'.
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3875
    ].
16212
da322a6b1d2a class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 16202
diff changeset
  3876
    ^ super copyReplaceAll:oldElement with:newElement
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3877
!
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3878
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3879
copyReplaceString:subString withString:newString
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3880
    "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
  3881
     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
  3882
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3883
    |tmpStream idx idx1|
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3884
15523
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  3885
    tmpStream := self species writeStream.
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3886
    idx := 1.
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3887
    [idx ~~ 0] whileTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3888
	idx1 := idx.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3889
	idx := self indexOfSubCollection:subString startingAt:idx.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3890
	idx ~~ 0 ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3891
	    tmpStream nextPutAll:(self copyFrom:idx1 to:idx-1).
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3892
	    tmpStream nextPutAll:newString.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3893
	    idx := idx + subString size
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3894
	]
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3895
    ].
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3896
    tmpStream nextPutAll:(self copyFrom:idx1).
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3897
    ^ tmpStream contents
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3898
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3899
   "
9306
de9b438212b8 comment
Stefan Vogel <sv@exept.de>
parents: 9282
diff changeset
  3900
     '12345678901234567890' copyReplaceString:'123' withString:'OneTwoThree'
de9b438212b8 comment
Stefan Vogel <sv@exept.de>
parents: 9282
diff changeset
  3901
     '12345678901234567890' copyReplaceString:'123' withString:'*'
de9b438212b8 comment
Stefan Vogel <sv@exept.de>
parents: 9282
diff changeset
  3902
     '12345678901234567890' copyReplaceString:'234' withString:'foo'
de9b438212b8 comment
Stefan Vogel <sv@exept.de>
parents: 9282
diff changeset
  3903
de9b438212b8 comment
Stefan Vogel <sv@exept.de>
parents: 9282
diff changeset
  3904
     ('a string with spaces' copyReplaceAll:$  withAll:' foo ')
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3905
	copyReplaceString:'foo' withString:'bar'
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3906
    "
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3907
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3908
    "Modified: / 31-05-1999 / 12:33:59 / cg"
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3909
    "Created: / 12-05-2004 / 12:00:00 / cg"
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3910
!
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3911
8040
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3912
copyWith:aCharacter
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3913
    "return a new string containing the receivers characters
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3914
     and the single new character, aCharacter.
8040
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3915
     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
  3916
     as argument, but equivalent to copy-and-addLast.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3917
     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
  3918
     (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
  3919
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3920
    |sz newString|
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3921
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3922
    aCharacter bitsPerCharacter > self bitsPerCharacter ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3923
	sz := self size.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3924
	newString := aCharacter stringSpecies new:sz + 1.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3925
	newString replaceFrom:1 to:sz with:self startingAt:1.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3926
	newString at:sz+1 put:aCharacter.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3927
	^ newString.
8040
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3928
    ].
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3929
    ^ super copyWith:aCharacter
17241
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3930
!
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3931
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3932
restAfter:keyword withoutSeparators:strip
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3933
    "compare the left of the receiver with keyword,
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3934
     if it matches return the right.
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3935
     Finally, if strip is true, remove whiteSpace.
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3936
     This method is used to match and extract lines of the form:
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3937
	something: rest
17241
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3938
     where we are interested in rest, but only if the receiver string
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3939
     begins with something.
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3940
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3941
     You may wonder why such a specialized method exists here
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3942
     - this is so common when processing mailboxes,
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3943
     rcs files, nntp/pop3 responses, that is was considered worth
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3944
     a special method here to avoid having the code below a hundred
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3945
     times in variuos places."
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3946
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3947
    |rest|
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3948
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3949
    (self startsWith:keyword) ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3950
	rest := self copyFrom:(keyword size + 1).
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3951
	strip ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3952
	    rest := rest withoutSeparators
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3953
	].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3954
	^ rest
17241
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3955
    ].
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3956
    ^ nil
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3957
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3958
    "
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3959
     'foo: hello world' restAfter:'foo:' withoutSeparators:true
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3960
     'funny: something' restAfter:'foo:' withoutSeparators:true
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3961
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3962
     'foo:     hello world    ' restAfter:'foo:' withoutSeparators:true
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3963
     'foo:     hello world    ' restAfter:'foo:' withoutSeparators:false
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3964
    "
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3965
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3966
    "Created: 25.11.1995 / 11:04:18 / cg"
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3967
!
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3968
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3969
splitAtString:subString withoutSeparators:strip
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3970
    "If the receiver is of the form:
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3971
	<left><subString><right>
17241
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3972
     return a collection containing left and right only.
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3973
     If strip is true, remove whiteSpace in the returned substrings."
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3974
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3975
    |idx left right|
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3976
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3977
    (idx := self indexOfSubCollection:subString) ~~ 0 ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3978
	left := self copyTo:(idx - 1).
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3979
	right := self copyFrom:(idx + subString size).
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3980
	strip ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3981
	    left := left withoutSeparators.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3982
	    right := right withoutSeparators.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3983
	].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3984
	^ StringCollection with:left with:right
17241
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3985
    ].
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3986
    self error:'substring not present in receiver' mayProceed:true.
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3987
    ^ self
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3988
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3989
    "
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3990
     'hello -> world' splitAtString:'->' withoutSeparators:false
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3991
     'hello -> world' splitAtString:'->' withoutSeparators:true
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3992
     'hello -> ' splitAtString:'->' withoutSeparators:true
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  3993
     'hello > error' splitAtString:'->' withoutSeparators:true
17241
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3994
    "
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3995
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3996
    "Created: 25.11.1995 / 11:04:18 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3997
! !
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3998
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3999
!CharacterArray methodsFor:'displaying'!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4000
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  4001
displayOn:aGC x:x y:y from:start to:stop
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  4002
    "display the receiver on a GC"
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  4003
12171
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  4004
    self displayOn:aGC x:x y:y from:start to:stop opaque:false
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  4005
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  4006
    "Modified: 12.5.1996 / 12:49:33 / cg"
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  4007
!
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  4008
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  4009
displayOn:aGC x:x y:y from:start to:stop opaque:opaque
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  4010
    "display the receiver on a GC"
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  4011
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  4012
    "q&d hack"
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  4013
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  4014
    (start == 1 and:[stop == self size]) ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4015
	self displayOn:aGC x:x y:y opaque:opaque.
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  4016
    ] ifFalse:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4017
	(self copyFrom:start to:stop) displayOn:aGC x:x y:y opaque:opaque.
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  4018
    ].
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  4019
!
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  4020
7082
675482728016 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7022
diff changeset
  4021
displayOn:aGc x:x y:y opaque:opaque
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  4022
    "display the receiver in a graphicsContext - this method allows
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  4023
     strings to be used like DisplayObjects."
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  4024
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  4025
    |s|
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  4026
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  4027
    s := self string.
7082
675482728016 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7022
diff changeset
  4028
    opaque ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4029
	aGc displayOpaqueString:s x:x y:y.
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  4030
    ] ifFalse:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4031
	aGc displayString:s x:x y:y.
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  4032
    ].
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  4033
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  4034
    "Modified: 11.5.1996 / 14:42:48 / cg"
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  4035
!
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  4036
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  4037
displayOpaqueOn:aGC x:x y:y from:start to:stop
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  4038
    "display the receiver on a GC"
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  4039
12171
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  4040
    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
  4041
! !
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4042
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4043
!CharacterArray methodsFor:'emphasis'!
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4044
11632
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  4045
actionForAll:aBlock
12326
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  4046
    "change the action block of all characters.
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  4047
     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
  4048
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  4049
    ^ self asText actionForAll:aBlock
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  4050
!
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  4051
5732
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  4052
allBold
12326
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  4053
    "return a text object representing the receiver, but all boldified"
5732
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  4054
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4055
    "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
  4056
    Text isNil ifTrue:[^ self].
5732
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  4057
    ^ self asText allBold
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  4058
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  4059
    "
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  4060
     Transcript showCR:'hello' asText allBold
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  4061
     Transcript showCR:'hello' allBold
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  4062
    "
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  4063
!
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  4064
5898
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  4065
allItalic
12326
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  4066
    "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
  4067
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4068
    "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
  4069
    Text isNil ifTrue:[^ self].
5898
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  4070
    ^ self asText allItalic
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  4071
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  4072
    "
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  4073
     Transcript showCR:'hello' asText allItalic
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  4074
     Transcript showCR:'hello' allItalic
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  4075
    "
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  4076
!
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  4077
11345
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  4078
allStrikedOut
12326
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  4079
    "return a text object representing the receiver, but all in strikeout"
11345
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  4080
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  4081
    "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
  4082
    Text isNil ifTrue:[^ self].
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  4083
    ^ self asText allStrikedOut
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  4084
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  4085
    "
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  4086
     Transcript showCR:'hello' asText allStrikedOut
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  4087
     Transcript showCR:'hello' allStrikedOut
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  4088
    "
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  4089
!
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  4090
10862
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  4091
allUnderlined
12326
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  4092
    "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
  4093
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  4094
    "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
  4095
    Text isNil ifTrue:[^ self].
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  4096
    ^ self asText allUnderlined
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  4097
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  4098
    "
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  4099
     Transcript showCR:'hello' asText allUnderlined
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  4100
     Transcript showCR:'hello' allUnderlined
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  4101
    "
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  4102
!
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  4103
6228
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  4104
colorizeAllWith:aColor
12326
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  4105
    "return a text object representing the receiver, but all colorized"
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  4106
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  4107
    "this test allows for small non-gui apps to be built without libbasic2 (where Text is)"
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  4108
    Text isNil ifTrue:[^ self].
6228
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  4109
    ^ self asText colorizeAllWith:aColor
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  4110
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  4111
    "
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  4112
     Transcript showCR:('hello' colorizeAllWith:Color red)
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  4113
     Transcript showCR:('world' colorizeAllWith:Color green darkened)
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  4114
    "
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  4115
!
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  4116
12330
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  4117
colorizeAllWith:fgColor on:bgColor
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  4118
    "return a text object representing the receiver, but all colorized with
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  4119
     both fg and background color"
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  4120
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  4121
    "this test allows for small non-gui apps to be built without libbasic2 (where Text is)"
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  4122
    Text isNil ifTrue:[^ self].
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  4123
    ^ self asText colorizeAllWith:fgColor on:bgColor
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  4124
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  4125
    "
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  4126
     Transcript showCR:('hello' colorizeAllWith:Color red on:Color yellow)
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  4127
     Transcript showCR:('world' colorizeAllWith:Color red)
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  4128
    "
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  4129
!
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  4130
1396
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  4131
emphasis
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  4132
    "return the emphasis.
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  4133
     Since characterArrays do not hold any emphasis information,
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  4134
     nil (no emphasis) is returned here."
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  4135
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  4136
    ^ RunArray new:self size withAll:nil
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  4137
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  4138
    "Created: 14.5.1996 / 13:58:58 / cg"
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  4139
!
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  4140
6655
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  4141
emphasis:emphasisCollection
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  4142
    ^ self asText emphasis:emphasisCollection
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  4143
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  4144
    "
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  4145
     Transcript showCR:('hello' emphasis:#(bold bold bold bold bold))
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  4146
    "
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  4147
!
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  4148
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4149
emphasisAt:characterIndex
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4150
    "return the emphasis at some index.
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4151
     Since characterArrays do not hold any emphasis information,
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4152
     nil (no emphasis) is returned here."
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4153
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4154
    ^ nil
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4155
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4156
    "Created: 11.5.1996 / 14:13:27 / cg"
1396
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  4157
!
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  4158
11632
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  4159
emphasisAtPoint:aPoint on:aGC
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  4160
    "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
  4161
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  4162
    ^ nil
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  4163
!
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  4164
1396
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  4165
emphasisCollection
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  4166
    "return the emphasis.
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  4167
     Since characterArrays do not hold any emphasis information,
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  4168
     nil (no emphasis) is returned here."
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  4169
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  4170
    ^ RunArray new:(self size)
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  4171
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  4172
    "Created: 14.5.1996 / 13:58:58 / cg"
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  4173
    "Modified: 14.5.1996 / 15:02:29 / cg"
3404
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  4174
!
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  4175
11919
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4176
emphasiseFrom:start to:stop with:newEmphasis
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4177
    "set to the emphasis within some range. return the receiver"
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4178
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4179
    ^ self asText emphasiseFrom:start to:stop with:newEmphasis
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4180
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4181
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  4182
     'hello' emphasiseFrom:2 with:#italic
11919
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4183
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4184
     Transcript showCR:('hello' emphasiseFrom:2 with:#italic)
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4185
    "
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4186
!
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4187
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4188
emphasiseFrom:start with:newEmphasis
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4189
    "set to the emphasis within some range. return the receiver"
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4190
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4191
    ^ self emphasiseFrom:start to:(self size) with:newEmphasis
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4192
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4193
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  4194
     'hello' emphasiseFrom:2 with:#italic
11919
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4195
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4196
     Transcript showCR:('hello' emphasiseFrom:2 with:#italic)
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4197
    "
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4198
!
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4199
3404
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  4200
emphasizeAllWith:emphasis
12326
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  4201
    "return a text object representing the receiver, but all emphasized"
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  4202
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  4203
    "this test allows for small non-gui apps to be built without libbasic2 (where Text is)"
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  4204
    Text isNil ifTrue:[^ self].
3404
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  4205
    ^ self asText emphasizeAllWith:emphasis
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  4206
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  4207
    "
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  4208
     Transcript showCR:('hello' emphasizeAllWith:#bold)
3599
fea09a812f55 comment
Claus Gittinger <cg@exept.de>
parents: 3578
diff changeset
  4209
     Transcript showCR:('hello' emphasizeAllWith:(#color -> Color red))
fea09a812f55 comment
Claus Gittinger <cg@exept.de>
parents: 3578
diff changeset
  4210
     Transcript showCR:('hello' emphasizeAllWith:(#color -> Color red))
fea09a812f55 comment
Claus Gittinger <cg@exept.de>
parents: 3578
diff changeset
  4211
    "
fea09a812f55 comment
Claus Gittinger <cg@exept.de>
parents: 3578
diff changeset
  4212
fea09a812f55 comment
Claus Gittinger <cg@exept.de>
parents: 3578
diff changeset
  4213
    "Modified: / 17.6.1998 / 12:51:44 / cg"
5097
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  4214
!
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  4215
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  4216
makeSelectorBoldIn:aClass
14050
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4217
    "the receiver represents some source code for a method in aClass.
5097
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  4218
     Change myself to boldify the selector.
14050
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4219
     Not yet implemented (could easily use the syntaxHighlighter for this ...).
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4220
     For protocol compatibility with other smalltalks"
5097
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  4221
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  4222
    ^ self
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  4223
14050
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4224
    "Created: / 13-12-1999 / 21:49:24 / cg"
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4225
!
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4226
16697
c462faf821b7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16693
diff changeset
  4227
withColor:aColor
c462faf821b7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16693
diff changeset
  4228
    "return a text object representing the receiver, but all colorized"
c462faf821b7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16693
diff changeset
  4229
c462faf821b7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16693
diff changeset
  4230
    ^ self colorizeAllWith:aColor
c462faf821b7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16693
diff changeset
  4231
c462faf821b7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16693
diff changeset
  4232
    "
c462faf821b7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16693
diff changeset
  4233
     Transcript showCR:('hello' withColor:Color red)
c462faf821b7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16693
diff changeset
  4234
     Transcript showCR:('world' withColor:Color green darkened)
c462faf821b7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16693
diff changeset
  4235
    "
c462faf821b7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16693
diff changeset
  4236
!
c462faf821b7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16693
diff changeset
  4237
14050
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4238
withoutAnyColorEmphasis
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4239
    "for protocol compatibility with Text"
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4240
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4241
    ^ self
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4242
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4243
    "Created: / 06-03-2012 / 18:15:38 / cg"
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4244
!
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4245
12396
0f75aad3a34c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12343
diff changeset
  4246
withoutBackgroundColorEmphasis
14050
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4247
    "for protocol compatibility with Text"
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4248
12396
0f75aad3a34c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12343
diff changeset
  4249
    ^ self
14050
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4250
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4251
    "Modified (comment): / 06-03-2012 / 18:14:27 / cg"
12396
0f75aad3a34c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12343
diff changeset
  4252
!
0f75aad3a34c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12343
diff changeset
  4253
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4254
withoutEmphasis:emphasisToRemove
14050
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4255
    "for protocol compatibility with Text"
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4256
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4257
    ^ self
14050
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4258
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4259
    "Modified (comment): / 06-03-2012 / 18:14:29 / cg"
12396
0f75aad3a34c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12343
diff changeset
  4260
!
0f75aad3a34c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12343
diff changeset
  4261
0f75aad3a34c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12343
diff changeset
  4262
withoutForegroundColorEmphasis
14050
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4263
    "for protocol compatibility with Text"
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4264
12396
0f75aad3a34c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12343
diff changeset
  4265
    ^ self
14050
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4266
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4267
    "Modified (comment): / 06-03-2012 / 18:14:31 / cg"
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4268
! !
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4269
7265
3b007758ff5b method category rename
Claus Gittinger <cg@exept.de>
parents: 7261
diff changeset
  4270
!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
  4271
12767
17d2c7268065 Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12679
diff changeset
  4272
decodeAsLiteralArray
17d2c7268065 Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12679
diff changeset
  4273
    "given a literalEncoding in the receiver,
17d2c7268065 Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12679
diff changeset
  4274
     create & return the corresponding object.
17d2c7268065 Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12679
diff changeset
  4275
     The inverse operation to #literalArrayEncoding."
17d2c7268065 Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12679
diff changeset
  4276
17d2c7268065 Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12679
diff changeset
  4277
    ^ self
17d2c7268065 Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12679
diff changeset
  4278
!
17d2c7268065 Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12679
diff changeset
  4279
991
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
  4280
decodeFrom:encodingSymbol
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4281
    "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
  4282
     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
  4283
ca774158b317 code cleanup (removed old obsolete encoding stuff)
Claus Gittinger <cg@exept.de>
parents: 8102
diff changeset
  4284
    |myEncoding encoder|
7950
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  4285
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  4286
    encodingSymbol isNil ifTrue:[^ self].
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  4287
    myEncoding := self encoding.
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  4288
    encodingSymbol == myEncoding ifTrue:[^ self].
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  4289
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  4290
    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
  4291
    encoder isNil ifTrue:[^ self].
ca774158b317 code cleanup (removed old obsolete encoding stuff)
Claus Gittinger <cg@exept.de>
parents: 8102
diff changeset
  4292
    ^ 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
  4293
!
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
  4294
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4295
encodeFrom:oldEncoding into:newEncoding
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4296
    ^ CharacterEncoder encodeString:self from:oldEncoding into:newEncoding
14405
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  4297
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  4298
    "
17600
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  4299
     'äüö' encodeFrom:#iso8859 into:#utf8
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  4300
     ('äüö' encodeFrom:#iso8859 into:#utf8) encodeFrom:#utf8 into:#unicode
14405
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  4301
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4302
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4303
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4304
rot13
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4305
     "Usenet: from `rotate alphabet 13 places']
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4306
      The simple Caesar-cypher encryption that replaces each English
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4307
      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
  4308
      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
  4309
      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
  4310
      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
  4311
      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
  4312
      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
  4313
      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
  4314
11865
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4315
    ^ self rot:13
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4316
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4317
    "
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4318
     'hello world' rot13
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4319
     'hello world' rot13 rot13
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4320
    "
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4321
!
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4322
11865
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4323
rot:n
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4324
     "Usenet: from `rotate alphabet N places']
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4325
      The simple Caesar-cypher encryption that replaces each English
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4326
      letter with the one N places forward or back along the alphabet,
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4327
      so that 'The butler did it!!' becomes 'Gur ohgyre qvq vg!!' by rot 13
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4328
      Most Usenet news reading and posting programs include a rot13 feature.
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4329
      It is used to enclose the text in a sealed wrapper that the reader must choose
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4330
      to open -- e.g., for posting things that might offend some readers, or spoilers.
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4331
      A major advantage of rot13 over rot(N) for other N is that it
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4332
      is self-inverse, so the same code can be used for encoding and decoding."
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4333
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4334
    ^ self species
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4335
	streamContents:[:aStream |
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4336
	    self do:[:char |
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4337
		aStream nextPut:(char rot:n) ]]
11865
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4338
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4339
    "
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4340
     'hello world' rot:13
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4341
     ('hello world' rot:13) rot:13
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4342
    "
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4343
!
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4344
15656
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4345
utf16Encoded
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4346
    "Return my UTF-16 representation as a new TwoByteString"
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4347
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4348
    |s|
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4349
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4350
    s := WriteStream on:(TwoByteString uninitializedNew:self size).
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4351
    s nextPutAllUtf16:self.
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4352
    ^ s contents
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4353
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4354
    "
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4355
     'abcde1234' utf16Encoded
17600
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  4356
     'abcdeäöüß' utf16Encoded
15656
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4357
    "
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4358
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4359
    "Modified: / 11-05-2010 / 19:12:37 / cg"
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4360
!
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4361
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4362
utf8Encoded
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4363
    "Return my UTF-8 representation as a new String"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4364
17625
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4365
    |string|
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4366
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4367
    string := self string.
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4368
    string ~~ self ifTrue:[
18597
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  4369
        ^ string utf8Encoded.
17625
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4370
    ].
14592
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  4371
18612
57db88d3a9fc class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18597
diff changeset
  4372
    ^ CharacterEncoderImplementations::ISO10646_to_UTF8 new encodeString:self
18597
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  4373
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  4374
    "
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  4375
     'abcde1234' asUnicode32String utf8Encoded
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  4376
     'abcdeäöüß' asUnicode32String utf8Encoded
12925
5c0a9a633ca1 comment/format in: #utf8Encoded
Claus Gittinger <cg@exept.de>
parents: 12912
diff changeset
  4377
    "
5c0a9a633ca1 comment/format in: #utf8Encoded
Claus Gittinger <cg@exept.de>
parents: 12912
diff changeset
  4378
5c0a9a633ca1 comment/format in: #utf8Encoded
Claus Gittinger <cg@exept.de>
parents: 12912
diff changeset
  4379
    "Modified: / 11-05-2010 / 19:12:37 / cg"
17625
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4380
!
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4381
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4382
utf8EncodedOn:aStream
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4383
    "write to aStream in utf8 encoding"
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4384
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4385
    |string|
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4386
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4387
    string := self string.
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4388
    string ~~ self ifTrue:[
18597
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  4389
        ^ string utf8EncodedOn:aStream.
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  4390
    ].
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  4391
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  4392
    self containsNon7BitAscii ifTrue:[
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  4393
        aStream nextPutAllUtf8:self.
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  4394
    ] ifFalse:[
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  4395
        "speed up common case"
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  4396
        aStream nextPutAll:self.
17625
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4397
    ].
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4398
18597
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  4399
    "
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  4400
     String streamContents:[:w|
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  4401
        'abcde1234' asUnicode32String utf8EncodedOn:w
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  4402
     ].
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  4403
     String streamContents:[:w|
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  4404
        'abcde1234' asUnicode32String utf8EncodedOn:w
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  4405
     ].
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  4406
     String streamContents:[:w|
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  4407
         'abcdeäöüß' asUnicode32String utf8EncodedOn:w
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  4408
     ].
17625
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4409
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4410
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4411
11345
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  4412
18721
0cbaff816be6 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18671
diff changeset
  4413
0cbaff816be6 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18671
diff changeset
  4414
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4415
!CharacterArray methodsFor:'matching - glob expressions'!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4416
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4417
compoundMatch:aString
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4418
    "like match, but the receiver may be a compound match pattern,
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4419
     consisting of multiple simple GLOB patterns, separated by semicolons.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4420
     This is usable with fileName pattern fields.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4421
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4422
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4423
	     NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4424
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4425
     NOTICE: the receiver is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4426
15890
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4427
    ^ self compoundMatch:aString caseSensitive:true withoutSeparators:false
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4428
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4429
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4430
     'f*' match:'foo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4431
     'b*' match:'foo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4432
     'f*;b*' match:'foo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4433
     'f*;b*' match:'bar'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4434
     'f*;b*' compoundMatch:'foo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4435
     'f*;b*' compoundMatch:'bar'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4436
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4437
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4438
    "Modified: / 30.1.1998 / 11:40:18 / stefan"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4439
    "Modified: / 16.12.1999 / 01:22:08 / cg"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4440
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4441
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4442
compoundMatch:aString caseSensitive:caseSensitive
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4443
    "like match, but the receiver may be a compound match pattern,
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4444
     consisting of multiple simple GLOB patterns, separated by semicolons.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4445
     This is usable with fileName pattern fields.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4446
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4447
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4448
	     NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4449
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4450
     NOTICE: the receiver is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4451
15890
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4452
    ^self compoundMatch:aString caseSensitive:caseSensitive withoutSeparators:false
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4453
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4454
    "
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4455
     'f*' match:'foo'
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4456
     'b*' match:'foo'
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4457
     'f*;b*' match:'foo'
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4458
     'f*;b*' match:'bar'
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4459
     'f*;b*' compoundMatch:'foo'
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4460
     'f*;b*' compoundMatch:'bar'
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4461
     'f*;b*' compoundMatch:'Foo' caseSensitive:false
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4462
     'f*;b*' compoundMatch:'Bar' caseSensitive:false
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4463
     'f*;b*' compoundMatch:'ccc' caseSensitive:false
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4464
    "
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4465
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4466
    "Modified: / 15.4.1997 / 15:50:33 / cg"
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4467
    "Modified: / 30.1.1998 / 11:40:18 / stefan"
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4468
    "Created: / 16.12.1999 / 01:21:35 / cg"
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4469
!
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4470
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4471
compoundMatch:aString caseSensitive:caseSensitive withoutSeparators:withoutSeparators
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4472
    "like match, but the receiver may be a compound match pattern,
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4473
     consisting of multiple simple GLOB patterns, separated by semicolons.
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4474
     If withoutSeparators is true, spaces around individual patterns are stripped off.
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4475
     This is usable with fileName pattern fields.
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4476
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4477
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4478
	     NOT the ST-80 meaning.
15890
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4479
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4480
     NOTICE: the receiver is the match pattern"
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4481
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4482
    |matchers|
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4483
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4484
    matchers := self asCollectionOfSubstringsSeparatedBy:$;.
15890
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4485
    withoutSeparators ifTrue:[ matchers := matchers collect:[:each | each withoutSeparators] ].
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4486
    ^ matchers
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4487
	contains:[:aPattern |
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4488
	    aPattern match:aString ignoreCase:caseSensitive not escapeCharacter:nil
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4489
	].
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4490
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4491
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4492
     'f*' match:'foo'
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4493
     'b*' match:'foo'
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4494
     'f*;b*' match:'foo'
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4495
     'f*;b*' match:'bar'
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4496
     'f*;b*' compoundMatch:'foo'
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4497
     'f*;b*' compoundMatch:'bar'
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4498
     'f*;b*' compoundMatch:'Foo' caseSensitive:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4499
     'f*;b*' compoundMatch:'Bar' caseSensitive:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4500
     'f*;b*' compoundMatch:'ccc' caseSensitive:false
15890
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4501
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4502
     'f* ; b*' compoundMatch:'foo'
15890
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4503
     'f* ; b*' compoundMatch:'foo' caseSensitive:true withoutSeparators:true
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4504
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4505
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4506
    "Modified: / 15.4.1997 / 15:50:33 / cg"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4507
    "Modified: / 30.1.1998 / 11:40:18 / stefan"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4508
    "Created: / 16.12.1999 / 01:21:35 / cg"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4509
!
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4510
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4511
compoundMatch:aString ignoreCase:ignoreCase
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4512
    <resource: #obsolete>
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4513
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4514
    "like match, but the receiver may be a compound match pattern,
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4515
     consisting of multiple simple GLOB patterns, separated by semicolons.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4516
     This is usable with fileName pattern fields.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4517
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4518
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4519
	     NOT the ST-80 meaning.
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4520
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4521
     NOTICE: the receiver is the match pattern"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4522
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4523
    ^ self compoundMatch:aString caseSensitive:ignoreCase not
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4524
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4525
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4526
     'f*' match:'foo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4527
     'b*' match:'foo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4528
     'f*;b*' match:'foo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4529
     'f*;b*' match:'bar'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4530
     'f*;b*' compoundMatch:'foo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4531
     'f*;b*' compoundMatch:'bar'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4532
     'f*;b*' compoundMatch:'Foo' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4533
     'f*;b*' compoundMatch:'Bar' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4534
     'f*;b*' compoundMatch:'ccc' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4535
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4536
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4537
    "Modified: / 15.4.1997 / 15:50:33 / cg"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4538
    "Modified: / 30.1.1998 / 11:40:18 / stefan"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4539
    "Created: / 16.12.1999 / 01:21:35 / cg"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4540
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4541
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4542
findMatchString:matchString
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4543
    "like findString/indexOfSubCollection, but allowing GLOB match patterns.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4544
     find matchstring; if found, return the index;
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4545
     if not found, return 0.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4546
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4547
     NOTICE: match-meta character interpretation is like in unix-matching,
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4548
	     NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4549
     NOTICE: this GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4550
     NOTICE: the argument is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4551
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4552
    ^ self findMatchString:matchString startingAt:1 ignoreCase:false ifAbsent:0
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4553
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4554
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4555
findMatchString:matchString startingAt:index
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4556
    "like findString, but allowing GLOB match patterns.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4557
     find matchstring, starting at index. if found, return the index;
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4558
     if not found, return 0.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4559
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4560
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4561
	     NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4562
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4563
     NOTICE: the argument is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4564
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4565
    ^ self findMatchString:matchString startingAt:index ignoreCase:false ifAbsent:0
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4566
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4567
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4568
findMatchString:matchString startingAt:index caseSensitive:caseSensitive ifAbsent:exceptionBlock
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4569
    "like findString, but allowing GLOB match patterns.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4570
     find matchstring, starting at index. if found, return the index;
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4571
     if not found, return the result of evaluating exceptionBlock.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4572
     This is a q&d hack - not very efficient.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4573
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4574
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4575
	     NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4576
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4577
     NOTICE: the argument is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4578
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4579
    |firstChar firstSet
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4580
     startIndex "{ Class: SmallInteger }"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4581
     matchSize  "{ Class: SmallInteger }"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4582
     mySize     "{ Class: SmallInteger }"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4583
     realMatchString lcChar ucChar|
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4584
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4585
    matchSize := matchString size.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4586
    matchSize == 0 ifTrue:[^ index]. "empty string matches"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4587
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4588
    realMatchString := matchString.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4589
    (realMatchString endsWith:$*) ifFalse:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4590
	realMatchString := realMatchString , '*'.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4591
	matchSize := matchSize + 1
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4592
    ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4593
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4594
    mySize := self size.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4595
    firstChar := realMatchString at:1.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4596
    firstChar == self class matchEscapeCharacter ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4597
	firstChar := realMatchString at:2.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4598
    ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4599
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4600
    firstChar asString includesMatchCharacters ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4601
	index to:mySize do:[:col |
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4602
	    (realMatchString match:self from:col to:mySize caseSensitive:caseSensitive)
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4603
	    ifTrue:[^ col]
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4604
	].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4605
	^ exceptionBlock value.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4606
    ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4607
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4608
    lcChar := firstChar asLowercase.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4609
    ucChar := firstChar asUppercase.
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4610
    (caseSensitive not and:[ lcChar ~= ucChar ]) ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4611
	firstSet := Array with:ucChar with:lcChar.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4612
	startIndex := self indexOfAny:firstSet startingAt:index.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4613
    ] ifFalse:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4614
	startIndex := self indexOf:firstChar startingAt:index.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4615
    ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4616
    [startIndex == 0] whileFalse:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4617
	(realMatchString match:self from:startIndex to:mySize caseSensitive:caseSensitive)
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4618
	ifTrue:[^ startIndex].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4619
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4620
	firstSet notNil ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4621
	    startIndex := self indexOfAny:firstSet startingAt:(startIndex + 1).
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4622
	] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4623
	    startIndex := self indexOf:firstChar startingAt:(startIndex + 1).
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4624
	].
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4625
    ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4626
    ^ exceptionBlock value
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4627
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4628
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4629
     'one two three four' findMatchString:'o[nu]'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4630
     'one two three four' findMatchString:'o[nu]' startingAt:3
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4631
     'one two three four one' findMatchString:'ONE' startingAt:3 caseSensitive:false ifAbsent:0
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4632
     'one two three four one' findMatchString:'ONE' startingAt:3 caseSensitive:true ifAbsent:0
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4633
     'one two three four ONE' findMatchString:'O#E' startingAt:1 caseSensitive:false ifAbsent:0
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4634
     'one two three four ONE' findMatchString:'O#E' startingAt:1 caseSensitive:true ifAbsent:0
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4635
      12345678901234567890
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4636
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4637
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4638
    "Modified: 13.9.1997 / 06:31:22 / cg"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4639
!
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4640
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4641
findMatchString:matchString startingAt:index ignoreCase:ignoreCase ifAbsent:exceptionBlock
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4642
    <resource: #obsolete>
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4643
    "like findString, but allowing GLOB match patterns.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4644
     find matchstring, starting at index. if found, return the index;
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4645
     if not found, return the result of evaluating exceptionBlock.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4646
     This is a q&d hack - not very efficient.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4647
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4648
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4649
	     NOT the ST-80 meaning.
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4650
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4651
     NOTICE: the argument is the match pattern"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4652
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4653
    ^ self
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4654
	findMatchString:matchString startingAt:index caseSensitive:ignoreCase not ifAbsent:exceptionBlock
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4655
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4656
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4657
     'one two three four' findMatchString:'o[nu]'
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4658
     'one two three four' findMatchString:'o[nu]' startingAt:3
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4659
     'one two three four one' findMatchString:'ONE' startingAt:3 ignoreCase:true ifAbsent:0
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4660
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4661
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4662
    "Modified: 13.9.1997 / 06:31:22 / cg"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4663
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4664
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4665
includesMatchString:matchString
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4666
    "like includesString, but allowing GLOB match patterns.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4667
     find matchstring; if found, return true, otherwise return false.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4668
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4669
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4670
	     NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4671
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4672
     NOTICE: the argument is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4673
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4674
    ^ (self findMatchString:matchString) ~~ 0
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4675
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4676
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4677
     'hello world' includesMatchString:'h*'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4678
     'hello world' includesMatchString:'h[aeiou]llo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4679
     'hello world' includesMatchString:'wor*'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4680
     'hello world' includesMatchString:'woR*'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4681
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4682
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4683
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4684
includesMatchString:matchString caseSensitive:caseSensitive
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4685
    "like includesString, but allowing GLOB match patterns.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4686
     find matchstring; if found, return true, otherwise return false.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4687
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4688
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4689
	     NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4690
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4691
     NOTICE: the argument is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4692
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4693
    ^ (self findMatchString:matchString startingAt:1 ignoreCase:caseSensitive not ifAbsent:0) ~~ 0
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4694
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4695
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4696
     'hello world' includesMatchString:'h*' caseSensitive:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4697
     'hello world' includesMatchString:'h*' caseSensitive:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4698
     'Hello world' includesMatchString:'h*' caseSensitive:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4699
     'Hello world' includesMatchString:'h*' caseSensitive:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4700
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4701
     'hello world' includesMatchString:'h[aeiou]llo' caseSensitive:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4702
     'hello world' includesMatchString:'h[aeiou]llo' caseSensitive:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4703
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4704
     'hello world' includesMatchString:'wor*' caseSensitive:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4705
     'hello world' includesMatchString:'wor*' caseSensitive:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4706
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4707
     'hello world' includesMatchString:'woR*' caseSensitive:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4708
     'hello world' includesMatchString:'woR*' caseSensitive:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4709
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4710
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4711
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4712
match:aString
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4713
    "return true if aString matches self, where self may contain GLOB meta-match
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4714
     characters $* (to match any string) or $# (to match any character).
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4715
     or [...] to match a set of characters.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4716
     Lower/uppercase are considered different.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4717
     The escape character is the backQuote.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4718
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4719
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4720
	     NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4721
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4722
     NOTICE: the receiver is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4723
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4724
    ^ self match:aString from:1 to:aString size caseSensitive:true
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4725
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4726
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4727
     '\*f*' match:'f'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4728
     '\*f*' match:'*f'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4729
     '*\*f*' match:'*f'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4730
     '*f*' match:'*f'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4731
     '*ute*' match:'computer'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4732
     '*uter' match:'computer'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4733
     'uter*' match:'computer'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4734
     '*ute*' match:''
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4735
     '[abcd]*' match:'computer'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4736
     '[abcd]*' match:'komputer'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4737
     '*some*compl*ern*' match:'this is some more complicated pattern match'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4738
     '*some*compl*ern*' match:'this is another complicated pattern match'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4739
     '*-hh' match:'anton-h'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4740
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4741
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4742
    "Modified: / 9.6.1998 / 18:50:00 / cg"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4743
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4744
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4745
match:aString caseSensitive:caseSensitive
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4746
    "return true if aString matches self, where self may contain GLOB meta-match
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4747
     characters $* (to match any string) or $# (to match any character)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4748
     or [...] to match a set of characters.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4749
     If caseSensitive is false, lower/uppercase are considered the same.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4750
     The escape character is the backQuote.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4751
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4752
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4753
	     NOT the ST-80 meaning.
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4754
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4755
     NOTICE: the receiver is the match pattern"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4756
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4757
    ^ self match:aString from:1 to:aString size caseSensitive:caseSensitive
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4758
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4759
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4760
     '*ute*' match:'COMPUTER' caseSensitive:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4761
     '*uter' match:'COMPUTER' caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4762
     '[abcd]*' match:'computer' caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4763
     '[abcd]*' match:'Computer' caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4764
     '[a-k]*' match:'komputer' caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4765
     '[a-k]*' match:'zomputer' caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4766
     '[a-k]*' match:'Komputer' caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4767
     '[a-k]*' match:'Komputer' caseSensitive:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4768
     '*some*compl*ern*' match:'this is some more complicated pattern match' caseSensitive:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4769
     '*some*compl*ern*' match:'this is another complicated pattern match' caseSensitive:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4770
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4771
     Time millisecondsToRun:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4772
	Symbol allInstancesDo:[:sym |
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4773
	    '[ab]*' match:sym caseSensitive:true
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4774
	]
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4775
     ].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4776
     Time millisecondsToRun:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4777
	Symbol allInstancesDo:[:sym |
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4778
	    '*at:*' match:sym caseSensitive:true
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4779
	]
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4780
     ].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4781
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4782
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4783
    "Modified: 2.4.1997 / 17:28:58 / cg"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4784
!
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4785
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4786
match:aString caseSensitive:caseSensitive escapeCharacter:escape
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4787
    "return true if aString matches self, where self may contain GLOB meta-match
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4788
     characters $* (to match any string) or $# (to match any character)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4789
     or [...] to match a set of characters.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4790
     If caseSensitive is false, lower/uppercase are considered the same.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4791
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4792
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4793
	     NOT the ST-80 meaning.
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4794
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4795
     NOTICE: the receiver is the match pattern"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4796
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4797
    ^ self match:aString from:1 to:aString size caseSensitive:caseSensitive escapeCharacter:escape
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4798
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4799
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4800
     '*ute*' match:'COMPUTER' caseSensitive:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4801
     '*uter' match:'COMPUTER' caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4802
     '[abcd]*' match:'computer' caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4803
     '[abcd]*' match:'Computer' caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4804
     '[a-k]*' match:'komputer' caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4805
     '[a-k]*' match:'zomputer' caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4806
     '[a-k]*' match:'Komputer' caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4807
     '[a-k]*' match:'Komputer' caseSensitive:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4808
     '*some*compl*ern*' match:'this is some more complicated pattern match' caseSensitive:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4809
     '*some*compl*ern*' match:'this is another complicated pattern match' caseSensitive:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4810
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4811
     Time millisecondsToRun:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4812
	Symbol allInstancesDo:[:sym |
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4813
	    '[ab]*' match:sym caseSensitive:true
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4814
	]
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4815
     ].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4816
     Time millisecondsToRun:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4817
	Symbol allInstancesDo:[:sym |
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4818
	    '*at:*' match:sym caseSensitive:true
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4819
	]
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4820
     ].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4821
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4822
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4823
    "Modified: 2.4.1997 / 17:28:58 / cg"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4824
!
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4825
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4826
match:aString escapeCharacter:escape
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4827
    "return true if aString matches self, where self may contain GLOB meta-match
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4828
     characters $* (to match any string) or $# (to match any character).
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4829
     or [...] to match a set of characters.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4830
     Lower/uppercase are considered different.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4831
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4832
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4833
	     NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4834
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4835
     NOTICE: the receiver is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4836
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4837
    ^ self match:aString from:1 to:aString size ignoreCase:false escapeCharacter:escape
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4838
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4839
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4840
     'a\b\c\*' match:'a\b\c\d'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4841
     'a\b\c\*' match:'a\b\c\d' escapeCharacter:nil
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4842
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4843
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4844
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4845
match:aString from:start to:stop caseSensitive:caseSensitive
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4846
    "return true if part of aString matches myself,
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4847
     where self may contain GLOB meta-match
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4848
     characters $* (to match any string) or $# (to match any character)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4849
     or [...] to match a set of characters.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4850
     If caseSensitive is false, lower/uppercase are considered the same.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4851
     The escape character is the backQuote.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4852
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4853
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4854
	     NOT the ST-80 meaning.
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4855
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4856
     NOTICE: the receiver is the match pattern"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4857
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4858
    ^ self
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4859
	match:aString from:start to:stop caseSensitive:caseSensitive
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4860
	escapeCharacter:(self class matchEscapeCharacter)
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4861
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4862
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4863
     '*ute*' match:'12345COMPUTER' from:1 to:5 caseSensitive:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4864
     '*ute*' match:'12345COMPUTER' from:6 to:13 caseSensitive:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4865
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4866
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4867
    "Modified: / 10.11.1998 / 21:43:46 / cg"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4868
!
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4869
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4870
match:aString from:start to:stop caseSensitive:caseSensitive escapeCharacter:escape
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4871
    "return true if part of aString matches myself,
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4872
     where self may contain GLOB meta-match
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4873
     characters $* (to match any string) or $# (to match any character)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4874
     or [...] to match a set of characters.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4875
     If caseSensitive is false, lower/uppercase are considered the same.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4876
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4877
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4878
	     NOT the ST-80 meaning.
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4879
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4880
     NOTICE: the receiver is the match pattern"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4881
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4882
    |matchScanArray|
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4883
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4884
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4885
     keep the matchScanArray from the most recent match -
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4886
     avoids parsing the pattern over-and over if multiple searches
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4887
     are done with the same pattern.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4888
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4889
    (PreviousMatch notNil
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4890
    and:[PreviousMatch key = self]) ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4891
	matchScanArray := PreviousMatch value
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4892
    ] ifFalse:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4893
	matchScanArray := self class matchScanArrayFrom:self escapeCharacter:escape.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4894
	matchScanArray isNil ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4895
	    'CharacterArray [info]: invalid matchpattern:''' infoPrint. self infoPrint. ''' comparing for equality.' infoPrintCR.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4896
	    ^ self = aString
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4897
"/            ^ false
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4898
	].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4899
	PreviousMatch := self -> matchScanArray.
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4900
    ].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4901
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4902
    ^ self class
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4903
	matchScan:matchScanArray
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4904
	from:1 to:matchScanArray size
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4905
	with:aString
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4906
	from:start to:stop
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4907
	caseSensitive:caseSensitive
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4908
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4909
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4910
     '*ute*' match:'12345COMPUTER' from:1 to:5 caseSensitive:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4911
     '*ute*' match:'12345COMPUTER' from:6 to:13 caseSensitive:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4912
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4913
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4914
    "Modified: / 10.11.1998 / 21:43:46 / cg"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4915
!
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4916
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4917
match:aString from:start to:stop ignoreCase:ignoreCase
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4918
    <resource: #obsolete>
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4919
    "return true if part of aString matches myself,
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4920
     where self may contain GLOB meta-match
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4921
     characters $* (to match any string) or $# (to match any character)
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4922
     or [...] to match a set of characters.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4923
     If ignoreCase is true, lower/uppercase are considered the same.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4924
     The escape character is the backQuote.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4925
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4926
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4927
	     NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4928
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4929
     NOTICE: the receiver is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4930
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4931
    ^ self
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4932
	match:aString from:start to:stop ignoreCase:ignoreCase
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4933
	escapeCharacter:(self class matchEscapeCharacter)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4934
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4935
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4936
     '*ute*' match:'12345COMPUTER' from:1 to:5 ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4937
     '*ute*' match:'12345COMPUTER' from:6 to:13 ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4938
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4939
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4940
    "Modified: / 10.11.1998 / 21:43:46 / cg"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4941
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4942
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4943
match:aString from:start to:stop ignoreCase:ignoreCase escapeCharacter:escape
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4944
    <resource: #obsolete>
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4945
    "return true if part of aString matches myself,
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4946
     where self may contain GLOB meta-match
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4947
     characters $* (to match any string) or $# (to match any character)
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4948
     or [...] to match a set of characters.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4949
     If ignoreCase is true, lower/uppercase are considered the same.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4950
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4951
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4952
	     NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4953
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4954
     NOTICE: the receiver is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4955
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4956
    ^ self
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4957
	match:aString from:start to:stop
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4958
	caseSensitive:ignoreCase not
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4959
	escapeCharacter:escape
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4960
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4961
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4962
     '*ute*' match:'12345COMPUTER' from:1 to:5 ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4963
     '*ute*' match:'12345COMPUTER' from:6 to:13 ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4964
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4965
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4966
    "Modified: / 10.11.1998 / 21:43:46 / cg"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4967
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4968
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4969
match:aString ignoreCase:ignoreCase
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4970
    <resource: #obsolete>
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4971
    "return true if aString matches self, where self may contain GLOB meta-match
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4972
     characters $* (to match any string) or $# (to match any character)
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4973
     or [...] to match a set of characters.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4974
     If ignoreCase is true, lower/uppercase are considered the same.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4975
     The escape character is the backQuote.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4976
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4977
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4978
	     NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4979
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4980
     NOTICE: the receiver is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4981
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4982
    "/ leave it this way, in case a customer has redefined it for performance (for a while)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4983
    ^ self match:aString from:1 to:aString size ignoreCase:ignoreCase
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4984
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4985
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4986
     '*ute*' match:'COMPUTER' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4987
     '*uter' match:'COMPUTER' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4988
     '[abcd]*' match:'computer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4989
     '[abcd]*' match:'Computer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4990
     '[a-k]*' match:'komputer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4991
     '[a-k]*' match:'zomputer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4992
     '[a-k]*' match:'Komputer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4993
     '[a-k]*' match:'Komputer' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4994
     '*some*compl*ern*' match:'this is some more complicated pattern match' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4995
     '*some*compl*ern*' match:'this is another complicated pattern match' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4996
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4997
     Time millisecondsToRun:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4998
	Symbol allInstancesDo:[:sym |
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  4999
	    '[ab]*' match:sym ignoreCase:false
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5000
	]
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5001
     ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5002
     Time millisecondsToRun:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5003
	Symbol allInstancesDo:[:sym |
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5004
	    '*at:*' match:sym ignoreCase:false
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5005
	]
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5006
     ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5007
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5008
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5009
    "Modified: 2.4.1997 / 17:28:58 / cg"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5010
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5011
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5012
match:aString ignoreCase:ignoreCase escapeCharacter:escape
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  5013
    <resource: #obsolete>
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  5014
    "return true if aString matches self, where self may contain GLOB meta-match
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5015
     characters $* (to match any string) or $# (to match any character)
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5016
     or [...] to match a set of characters.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5017
     If ignoreCase is true, lower/uppercase are considered the same.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5018
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5019
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5020
	     NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  5021
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5022
     NOTICE: the receiver is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5023
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5024
    ^ self match:aString from:1 to:aString size ignoreCase:ignoreCase escapeCharacter:escape
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5025
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5026
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5027
     '*ute*' match:'COMPUTER' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5028
     '*uter' match:'COMPUTER' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5029
     '[abcd]*' match:'computer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5030
     '[abcd]*' match:'Computer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5031
     '[a-k]*' match:'komputer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5032
     '[a-k]*' match:'zomputer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5033
     '[a-k]*' match:'Komputer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5034
     '[a-k]*' match:'Komputer' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5035
     '*some*compl*ern*' match:'this is some more complicated pattern match' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5036
     '*some*compl*ern*' match:'this is another complicated pattern match' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5037
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5038
     Time millisecondsToRun:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5039
	Symbol allInstancesDo:[:sym |
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5040
	    '[ab]*' match:sym ignoreCase:false
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5041
	]
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5042
     ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5043
     Time millisecondsToRun:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5044
	Symbol allInstancesDo:[:sym |
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5045
	    '*at:*' match:sym ignoreCase:false
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5046
	]
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5047
     ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5048
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5049
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5050
    "Modified: 2.4.1997 / 17:28:58 / cg"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5051
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5052
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5053
matches:aPatternString
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  5054
    "return true if the receiver matches aString, where aPatternString may contain GLOB meta-match
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5055
     characters $* (to match any string) or $# (to match any character).
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5056
     or [...] to match a set of characters.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5057
     Lower/uppercase are considered different.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5058
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5059
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5060
	     NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  5061
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5062
     NOTICE: the receiver is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5063
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5064
    ^ aPatternString match:self
14054
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  5065
!
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  5066
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  5067
matches:aPatternString caseSensitive:caseSensitive
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  5068
    "return true if the receiver matches aString, where aPatternString may contain GLOB meta-match
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  5069
     characters $* (to match any string) or $# (to match any character).
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  5070
     or [...] to match a set of characters.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  5071
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  5072
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5073
	     NOT the ST-80 meaning.
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  5074
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  5075
     NOTICE: the receiver is the match pattern"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  5076
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  5077
    ^ aPatternString match:self caseSensitive:caseSensitive
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  5078
!
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  5079
14054
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  5080
matches:aPatternString ignoreCase:ignoreCase
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  5081
    <resource: #obsolete>
14054
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  5082
    "return true if the receiver matches aString, where aPatternString may contain GLOB meta-match
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  5083
     characters $* (to match any string) or $# (to match any character).
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  5084
     or [...] to match a set of characters.
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  5085
     Lower/uppercase are considered different.
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  5086
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  5087
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5088
	     NOT the ST-80 meaning.
14054
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  5089
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  5090
     NOTICE: the receiver is the match pattern"
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  5091
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  5092
    ^ aPatternString match:self caseSensitive:ignoreCase not
14054
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  5093
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  5094
    "Created: / 08-03-2012 / 03:11:11 / cg"
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5095
! !
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5096
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5097
18722
c5f338c2a6dc class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18721
diff changeset
  5098
!CharacterArray methodsFor:'matching - regex'!
c5f338c2a6dc class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18721
diff changeset
  5099
c5f338c2a6dc class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18721
diff changeset
  5100
matchesRegex:regexString caseSensitive:aBoolean
c5f338c2a6dc class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18721
diff changeset
  5101
    "Test if the receiver matches a regex.
c5f338c2a6dc class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18721
diff changeset
  5102
     May raise RxParser>>regexErrorSignal or child signals.
c5f338c2a6dc class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18721
diff changeset
  5103
     This is a part of the Regular Expression Matcher package,
c5f338c2a6dc class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18721
diff changeset
  5104
        (c) 1996, 1999 Vassili Bykov.
c5f338c2a6dc class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18721
diff changeset
  5105
     Refer to `documentation' protocol of RxParser class for details."
c5f338c2a6dc class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18721
diff changeset
  5106
c5f338c2a6dc class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18721
diff changeset
  5107
    aBoolean ifFalse:[
c5f338c2a6dc class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18721
diff changeset
  5108
        ^ self matchesRegexIgnoringCase:regexString
c5f338c2a6dc class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18721
diff changeset
  5109
    ] ifTrue:[
c5f338c2a6dc class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18721
diff changeset
  5110
        ^ self matchesRegex:regexString
c5f338c2a6dc class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18721
diff changeset
  5111
    ].
c5f338c2a6dc class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18721
diff changeset
  5112
c5f338c2a6dc class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18721
diff changeset
  5113
    "
c5f338c2a6dc class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18721
diff changeset
  5114
     'hello world' matchesRegex:'h.*d'.
c5f338c2a6dc class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18721
diff changeset
  5115
    "
c5f338c2a6dc class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18721
diff changeset
  5116
c5f338c2a6dc class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18721
diff changeset
  5117
    "Created: / 13-12-2010 / 11:01:49 / cg"
c5f338c2a6dc class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18721
diff changeset
  5118
! !
17625
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  5119
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5120
!CharacterArray methodsFor:'padded copying'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5121
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5122
centerPaddedTo:newSize
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5123
     "return a new string consisting of the receivers characters,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5124
     plus spaces up to length and center the receivers characters in
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5125
     the resulting string.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5126
     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
  5127
     the original receiver is returned unchanged."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5128
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5129
     ^ self centerPaddedTo:newSize with:(Character space)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5130
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
     'foo' centerPaddedTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5133
     123 printString centerPaddedTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5134
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5135
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5136
    "Created: 25.11.1995 / 10:53:57 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5137
!
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5138
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5139
centerPaddedTo:size with:padCharacter
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5140
    "return a new string of length size, which contains the receiver
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5141
     centered (i.e. padded on both sides).
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5142
     Characters are filled with padCharacter.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5143
     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
  5144
     the original receiver is returned unchanged."
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5145
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5146
    |len s|
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5147
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5148
    len := self size.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5149
    (len < size) ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5150
	s := self species new:size withAll:padCharacter.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5151
	s replaceFrom:(size - len) // 2  + 1 with:self.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5152
	^ s
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5153
    ]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5154
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5155
    "
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5156
     'foo' centerPaddedTo:11 with:$.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5157
     'fooBar' centerPaddedTo:5 with:$.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5158
     123 printString centerPaddedTo:10 with:$.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5159
     (' ' , 123 printString) centerPaddedTo:10 with:$.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5160
     (Float pi printString) centerPaddedTo:15 with:(Character space)
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5161
     (Float pi printString) centerPaddedTo:15 with:$-
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5162
     (' ' , Float pi class name) centerPaddedTo:15 with:$.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5163
    "
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5164
!
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5165
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5166
decimalPaddedTo:size and:afterPeriod at:decimalCharacter
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5167
    "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
  5168
     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
  5169
     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
  5170
     to be padded).
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5171
     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
  5172
     the original receiver is returned unchanged.
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5173
     (sounds complicated ? -> see examples below)."
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5174
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5175
    ^ self
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5176
	decimalPaddedTo:size
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5177
	and:afterPeriod
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5178
	at:decimalCharacter
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5179
	withLeft:(Character space)
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5180
	right:$0
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5181
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5182
    "
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5183
     '123' decimalPaddedTo:10 and:3 at:$.      -> '   123    '
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5184
     '123' decimalPaddedTo:10 and:3 at:$.      -> '   123.000'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5185
     '123.' decimalPaddedTo:10 and:3 at:$.     -> '   123.000'
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5186
     '123.1' decimalPaddedTo:10 and:3 at:$.    -> '   123.100'
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5187
     '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
  5188
     '123.123' decimalPaddedTo:10 and:3 at:$.  -> '   123.123'
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5189
    "
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5190
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5191
    "Created: 23.12.1995 / 13:11:52 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5192
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5193
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5194
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
  5195
    "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
  5196
     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
  5197
     of the period.
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5198
     Characters on the left are filled with leftPadChar.
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5199
     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
  5200
     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
  5201
     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
  5202
     the original receiver is returned unchanged.
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5203
     (sounds complicated ? -> see examples below)."
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5204
5230
655c21ffe6cc care for negative size of rest-string when decimalPadding
Claus Gittinger <cg@exept.de>
parents: 5221
diff changeset
  5205
    |s idx n rest|
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5206
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5207
    idx := self indexOf:decimalCharacter.
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5208
    idx == 0 ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5209
	"/
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5210
	"/ no decimal point found; adjust string to the left of the period column
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5211
	"/
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5212
	rightPadChar isNil ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5213
	    s := self , (self species new:afterPeriod + 1 withAll:leftPadChar)
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5214
	] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5215
	    s:= self , decimalCharacter asString , (self species new:afterPeriod withAll:rightPadChar).
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5216
	].
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5217
    ] ifFalse:[
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5218
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5219
	"/ the number of after-decimalPoint characters
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5220
	n := self size - idx.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5221
	rest := afterPeriod - n.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5222
	rest > 0 ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5223
	    s := (self species new:rest withAll:(rightPadChar ? leftPadChar)).
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5224
	] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5225
	    s := ''
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5226
	].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5227
	s := self , s.
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5228
    ].
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5229
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5230
    ^ s leftPaddedTo:size with:leftPadChar
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5231
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5232
    "
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5233
     '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
  5234
     '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
  5235
     '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
  5236
     '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
  5237
     '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
  5238
     '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
  5239
    "
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5240
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5241
    "Modified: 23.12.1995 / 13:08:18 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5242
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5243
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5244
leftPaddedTo:size
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5245
    "return a new string of length size, which contains the receiver
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5246
     right-adjusted (i.e. padded on the left).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5247
     Characters on the left are filled with spaces.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5248
     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
  5249
     the original receiver is returned unchanged."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5250
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5251
    ^ self leftPaddedTo:size with:(Character space)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5252
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5253
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5254
     'foo' leftPaddedTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5255
     'fooBar' leftPaddedTo:5
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5256
     123 printString leftPaddedTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5257
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5258
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5259
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5260
paddedTo:newSize
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5261
     "return a new string consisting of the receivers characters,
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5262
     plus spaces up to length.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5263
     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
  5264
     the original receiver is returned unchanged."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5265
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5266
     ^ self paddedTo:newSize with:(Character space)
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5267
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5268
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5269
     'foo' paddedTo:10
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5270
     123 printString paddedTo:10
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  5271
     '12345678901234' paddedTo:10
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5272
    "
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5273
! !
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5274
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5275
!CharacterArray methodsFor:'printing & storing'!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5276
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5277
article
17137
9a31ec4d6489 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17065
diff changeset
  5278
    "return an article string for the receiver.
9a31ec4d6489 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17065
diff changeset
  5279
     The original code only looked at the first character being a vowel;
9a31ec4d6489 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17065
diff changeset
  5280
     this has been enhanced by some heuristics - not perfect, still."
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5281
17241
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  5282
    |firstChar secondChar thirdChar|
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5283
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5284
    firstChar := (self at:1) asLowercase.
5848
ef81d77ca1ad UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5843
diff changeset
  5285
    ((firstChar isVowel and:[firstChar ~~ $u]) or:[firstChar == $x]) ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5286
	^ 'an'
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5287
    ].
17043
4cd789620782 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17024
diff changeset
  5288
4cd789620782 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17024
diff changeset
  5289
    (self size >= 3) ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5290
	secondChar := (self at:2) asLowercase.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5291
	thirdChar := (self at:3) asLowercase.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5292
	(firstChar isVowel not
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5293
	and:[(secondChar isVowel or:[secondChar == $y]) not
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5294
	and:[thirdChar isVowel not ]]) ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5295
	    "/ exceptions: 3 non-vowels in a row: looks like an abbreviation
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5296
	    (self size > 4) ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5297
		(firstChar == $s) ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5298
		    ((secondChar == $c and:[thirdChar == $r])
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5299
		    or:[ (secondChar == $t and:[thirdChar == $r]) ]) ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5300
			(self at:4) isVowel ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5301
			    ^ 'a'
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5302
			]
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5303
		    ]
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5304
		].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5305
	    ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5306
	    "/ an abbreviation; treat x, s as vowels
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5307
	    (firstChar == $x or:[ firstChar == $s ]) ifTrue:[^ 'an'].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5308
	]
17043
4cd789620782 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17024
diff changeset
  5309
    ].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5310
    ^ 'a'
5848
ef81d77ca1ad UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5843
diff changeset
  5311
ef81d77ca1ad UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5843
diff changeset
  5312
    "
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5313
	'uboot' article.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5314
	'xmas' article.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5315
	'alarm' article.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5316
	'baby' article.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5317
	'sql' article.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5318
	'scr' article.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5319
	'screen' article.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5320
	'scrollbar' article.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5321
	'scrs' article.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5322
	'cvs' article.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5323
	'cvssource' article.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5324
	'symbol' article.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5325
	'string' article.
5848
ef81d77ca1ad UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5843
diff changeset
  5326
    "
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5327
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5328
8049
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  5329
basicStoreString
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  5330
    "return a String for storing myself"
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  5331
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  5332
    |s n index|
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  5333
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  5334
    n := self occurrencesOf:$'.
11320
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  5335
    n ~~ 0 ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5336
	s := self species new:(n + 2 + self size).
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5337
	s at:1 put:$'.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5338
	index := 2.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5339
	self do:[:thisChar |
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5340
	    (thisChar == $') ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5341
		s at:index put:thisChar.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5342
		index := index + 1.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5343
	    ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5344
	    s at:index put:thisChar.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5345
	    index := index + 1.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5346
	].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5347
	s at:index put:$'.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5348
	^ s
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5349
    ].
11320
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  5350
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5351
    ^ '''' , self , ''''
15523
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5352
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5353
    "
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5354
     '''immutable'' string' asImmutableString basicStoreString
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5355
     'immutable string' asImmutableString basicStoreString
15523
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5356
    "
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5357
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5358
    "Modified: / 14-07-2013 / 19:20:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5359
!
8049
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  5360
11774
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  5361
displayOn:aGCOrStream
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  5362
    "Compatibility
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  5363
     append a printed desription on some stream (Dolphin,  Squeak)
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  5364
     OR:
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  5365
     display the receiver in a graphicsContext at 0@0 (ST80).
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  5366
     This method allows for any object to be displayed in some view
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  5367
     (although the fallBack is to display its printString ...)"
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  5368
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  5369
    "/ what a kludge - Dolphin and Squeak mean: printOn: a stream;
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  5370
    "/ ST/X (and some old ST80's) mean: draw-yourself on a GC.
16738
bd9416219f7c displayOn: cleanup
Claus Gittinger <cg@exept.de>
parents: 16733
diff changeset
  5371
    (aGCOrStream isStream) ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5372
	self storeOn:aGCOrStream.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5373
	^ self
11774
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  5374
    ].
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  5375
    ^ super displayOn:aGCOrStream
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  5376
!
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  5377
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5378
printOn:aStream
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5379
    "print the receiver on aStream"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5380
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5381
    aStream nextPutAll:self
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5382
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5383
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5384
printString
13079
111e7e456648 Implement display with #displayOn: instead of #displayString
Stefan Vogel <sv@exept.de>
parents: 13073
diff changeset
  5385
    "return a string for printing - that's myself"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5386
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5387
    ^ self
3578
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  5388
!
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  5389
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  5390
printWithQuotesDoubledOn:aStream
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  5391
    "put the raw storeString of myself on aStream"
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  5392
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  5393
    self do:[:thisChar |
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5394
	(thisChar == $') ifTrue:[aStream nextPut:thisChar].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5395
	aStream nextPut:thisChar
3578
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  5396
    ]
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  5397
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  5398
    "Modified: / 15.6.1998 / 17:21:17 / cg"
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  5399
    "Created: / 15.6.1998 / 17:22:13 / cg"
12171
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  5400
!
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  5401
15788
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5402
printXmlQuotedOn:aStream
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5403
    "convert aString to a valid XML string
15788
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5404
     that can be used for attributes, text, comments an PIs
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5405
     TODO: care for 16bit UNICODE string and escape chars ..."
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5406
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5407
    self do:[:eachChar |
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5408
	eachChar == $< ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5409
	    aStream nextPutAll:'&lt;'     "mapping needed for xml text"
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5410
	] ifFalse:[ eachChar == $& ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5411
	    aStream nextPutAll:'&amp;'    "mapping needed for all"
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5412
	] ifFalse:[ eachChar == $> ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5413
	    aStream nextPutAll:'&gt;'     "mapping needed for comments"
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5414
	] ifFalse:[ eachChar == $' ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5415
	    aStream nextPutAll:'&apos;'   "mapping needed for attributes"
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5416
	] ifFalse:[ eachChar == $" ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5417
	    aStream nextPutAll:'&quot;'   "mapping needed for attributes"
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5418
	] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5419
	    |codePoint|
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5420
	    codePoint := eachChar codePoint.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5421
	    (codePoint < 16r20 or:[codePoint >= 16r7F]) ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5422
		aStream nextPutAll:'&#'.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5423
		codePoint printOn:aStream.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5424
		aStream nextPut:$;.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5425
	] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5426
	    aStream nextPut:eachChar
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5427
	]]]]]]
15788
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5428
    ].
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5429
!
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5430
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5431
printXmlTextQuotedOn:aStream
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5432
    "convert aString to a valid XML string
15788
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5433
     that can be used for XML text.
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5434
     Here line formatting characters are not escaped.
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5435
     TODO: care for 16bit UNICODE string and escape chars ..."
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5436
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5437
    self do:[:eachChar |
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5438
	eachChar == $< ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5439
	    aStream nextPutAll:'&lt;'     "mapping needed for xml text"
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5440
	] ifFalse:[ eachChar == $& ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5441
	    aStream nextPutAll:'&amp;'    "mapping needed for all"
15788
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5442
"/        ] ifFalse:[ eachChar == $> ifTrue:[
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5443
"/            aStream nextPutAll:'&gt;'     "mapping needed for comments"
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5444
"/        ] ifFalse:[ eachChar == $' ifTrue:[
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5445
"/            aStream nextPutAll:'&apos;'   "mapping needed for attributes"
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5446
"/        ] ifFalse:[ eachChar == $" ifTrue:[
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5447
"/            aStream nextPutAll:'&quot;'   "mapping needed for attributes"
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5448
	] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5449
	    |codePoint|
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5450
	    codePoint := eachChar codePoint.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5451
	    ((codePoint < 16r20 and:[codePoint ~~ 9 and:[codePoint ~~ 10 and:[codePoint ~~ 13]]])
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5452
	     or:[codePoint >= 16r7F]) ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5453
		aStream nextPutAll:'&#'.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5454
		codePoint printOn:aStream.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5455
		aStream nextPut:$;.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5456
	] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5457
	    aStream nextPut:eachChar
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5458
	]]]"/]]]
15788
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5459
    ].
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5460
!
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5461
12171
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  5462
printfWith:arg1 with:arg2 with:arg3 with:arg4 with:arg5
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5463
    "Format and print the receiver with <argI> formatted in C style,
12171
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  5464
     as specified in the Unix C-language manual page for printf(3).
15712
8aa66f2ff56c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15656
diff changeset
  5465
     Return the resulting string (i.e actually, this is more like an sprintf)."
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5466
12171
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  5467
    ^ self printf:(Array with:arg1 with:arg2 with:arg3 with:arg4 with:arg5)
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  5468
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  5469
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5470
     Transcript showCR:('%d %05x %08o %b' printfWith:123 with:234 with:345 with:123)
12171
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  5471
    "
15788
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5472
!
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5473
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5474
xmlQuotedPrintString
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5475
    "convert aString to a valid XML string
15788
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5476
     that can be used for attributes, text, comments an PIs
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5477
     TODO: care for 16bit UNICODE string and escape chars ..."
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5478
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5479
    ^ String streamContents:[:s|
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5480
	self printXmlQuotedOn:s
15788
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5481
    ].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5482
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5483
11955
1230c6953d49 comments
Claus Gittinger <cg@exept.de>
parents: 11919
diff changeset
  5484
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5485
!CharacterArray methodsFor:'queries'!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5486
4429
564b0fd9168e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4410
diff changeset
  5487
bitsPerCharacter
18662
3ad440593060 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18657
diff changeset
  5488
    "return the underlying string's bitsPerCharacter
4429
564b0fd9168e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4410
diff changeset
  5489
     (i.e. is it a regular String or a TwoByteString)"
564b0fd9168e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4410
diff changeset
  5490
8457
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  5491
    |string max|
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  5492
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  5493
    (string := self string) ~~ self ifTrue:[
18662
3ad440593060 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18657
diff changeset
  5494
        ^ string bitsPerCharacter
8457
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  5495
    ].
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  5496
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  5497
    max := 8.
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  5498
    self do:[:eachCharacter |
18662
3ad440593060 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18657
diff changeset
  5499
        max := max max:(eachCharacter bitsPerCharacter)
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5500
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5501
    ^ max
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5502
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
     'hello' bitsPerCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5505
     'hello' asText allBold bitsPerCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5506
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5507
!
8457
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  5508
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5509
continuesWith:aString startingAt:startIndex
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5510
    "return true, if the receiver beginning at startIndex
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5511
     contains the characters in aString."
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5512
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5513
    |sz  "{Class: SmallInteger }"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5514
     idx "{Class: SmallInteger }"|
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5515
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5516
    sz := aString size.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5517
    idx := startIndex.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5518
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5519
    1 to:sz do:[:i |
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5520
	(self at:idx) ~~ (aString at:i) ifTrue:[^ false].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5521
	idx := idx + 1
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5522
    ].
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5523
    ^ true
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5524
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5525
    "
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5526
     'hello world' continuesWith:'world' startingAt:6
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5527
     'hello world' continuesWith:'world' startingAt:7
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5528
    "
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5529
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5530
    "Created: 12.5.1996 / 15:46:40 / cg"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5531
    "Modified: 26.7.1996 / 19:08:36 / cg"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5532
!
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5533
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5534
countWords
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5535
    "return the number of words, which are separated by separators"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5536
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5537
    |tally "{ Class: SmallInteger }"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5538
     start "{ Class: SmallInteger }"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5539
     mySize "{ Class: SmallInteger }"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5540
     stop ch|
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5541
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5542
    tally := 0.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5543
    start := 1.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5544
    mySize := self size.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5545
    [start <= mySize] whileTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5546
	ch := self at:start.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5547
	ch isSeparator ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5548
	    start := start + 1
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5549
	] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5550
	    stop := self indexOfSeparatorStartingAt:start.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5551
	    (stop == 0) ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5552
		stop := mySize + 1
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5553
	    ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5554
	    tally := tally + 1.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5555
	    start := stop
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5556
	]
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5557
    ].
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5558
    ^ tally
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5559
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5560
    "
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5561
     'hello world isnt this nice' countWords'
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5562
    "
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5563
!
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5564
11788
eea1835a1b7b added #defaultElement
Stefan Vogel <sv@exept.de>
parents: 11774
diff changeset
  5565
defaultElement
eea1835a1b7b added #defaultElement
Stefan Vogel <sv@exept.de>
parents: 11774
diff changeset
  5566
    ^ Character space
eea1835a1b7b added #defaultElement
Stefan Vogel <sv@exept.de>
parents: 11774
diff changeset
  5567
!
eea1835a1b7b added #defaultElement
Stefan Vogel <sv@exept.de>
parents: 11774
diff changeset
  5568
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5569
encoding
1311
367f740d21e7 commentary
Claus Gittinger <cg@exept.de>
parents: 1308
diff changeset
  5570
    "return the strings encoding, as a symbol.
7982
0412a26c4621 encoding now unicode
Claus Gittinger <cg@exept.de>
parents: 7977
diff changeset
  5571
     Here, by default, we assume unicode-encoding.
0412a26c4621 encoding now unicode
Claus Gittinger <cg@exept.de>
parents: 7977
diff changeset
  5572
     Notice, that iso8859-1 is a true subset of unicode,
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5573
     and that singleByteStrings are therefore both unicode AND
7982
0412a26c4621 encoding now unicode
Claus Gittinger <cg@exept.de>
parents: 7977
diff changeset
  5574
     8859-1 encoded."
0412a26c4621 encoding now unicode
Claus Gittinger <cg@exept.de>
parents: 7977
diff changeset
  5575
14168
fb2ae640ab02 formatting
Stefan Vogel <sv@exept.de>
parents: 14150
diff changeset
  5576
    ^ #unicode
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5577
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5578
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  5579
hasChangeOfEmphasis
14405
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  5580
    "return true, if the receiver contains non-empty emphasis information
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  5581
     i.e. any non-normal (=emphasized) characters"
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  5582
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  5583
    ^ false
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  5584
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5585
    "Created: 12.5.1996 / 12:31:39 / cg"
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  5586
!
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  5587
7995
8ddbb403d67b +hasIcon and hasImage for LabelAndIcon compatibility
Claus Gittinger <cg@exept.de>
parents: 7991
diff changeset
  5588
hasIcon
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  5589
    "for LabelAndIcon compatibility"
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  5590
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5591
    ^ false
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
hasImage
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5595
    "for LabelAndIcon compatibility"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5596
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5597
    ^ false
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5598
!
7995
8ddbb403d67b +hasIcon and hasImage for LabelAndIcon compatibility
Claus Gittinger <cg@exept.de>
parents: 7991
diff changeset
  5599
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5600
heightOn:aGC
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5601
    "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
  5602
6528
cf4e93b8104b #on: -> #onDevice
Claus Gittinger <cg@exept.de>
parents: 6523
diff changeset
  5603
    ^ (aGC font onDevice:aGC device) heightOf:self
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5604
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5605
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5606
     'hello world' heightOn:(View new)
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5607
    "
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5608
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5609
    "Created: 12.5.1996 / 20:09:29 / cg"
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5610
    "Modified: 12.5.1996 / 20:32:05 / cg"
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5611
!
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5612
15773
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5613
isKeyword
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5614
    "return true, if the receiver is a keyword message selector"
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5615
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5616
    ^ self includes:$:
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5617
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5618
    "
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5619
     #at:put: isKeyword
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5620
     #at: isKeyword
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5621
     #+ isKeyword
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5622
     #size isKeyword
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5623
    "
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5624
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5625
    "Created: / 1.11.1997 / 12:34:55 / cg"
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5626
    "Modified: / 1.11.1997 / 12:36:37 / cg"
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5627
!
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5628
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5629
isLowercaseFirst
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5630
    "return true, if the first character is a lowercase character."
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5631
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5632
    ^ self size ~~ 0 and:[ self first isLowercase ]
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5633
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5634
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5635
     'helloWorld' isLowercaseFirst
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5636
     'HelloWorld' isLowercaseFirst
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5637
    "
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5638
!
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5639
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5640
isUppercaseFirst
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5641
    "return true, if the first character is an uppercase character."
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5642
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5643
    ^ self size ~~ 0 and:[ self first isUppercase ]
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5644
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5645
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5646
     'helloWorld' isUppercaseFirst
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5647
     'HelloWorld' isUppercaseFirst
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5648
    "
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5649
!
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5650
15773
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5651
keywords
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5652
    "assuming the receiver is a keyword message selector,
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5653
     return the individual keywords (i.e. break it up at colons)
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5654
     and return these as a collection.
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5655
     For binary and unary selectors, the result may be nonsense (an array containing the receiver)."
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5656
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5657
    |coll s part|
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5658
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5659
    coll := OrderedCollection new.
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5660
    s := ReadStream on:self.
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5661
    [s atEnd] whileFalse:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5662
	part := s through:$:.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5663
	coll add:part
15773
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5664
    ].
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5665
    ^ coll asArray
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5666
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5667
    "
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5668
     #at:put: keywords
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5669
     #at: keywords
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5670
     #+ keywords
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5671
     #size keywords
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5672
    "
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5673
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5674
    "Modified (Comment): / 30-06-2011 / 17:46:21 / cg"
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5675
!
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5676
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5677
knownAsSymbol
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5678
    "for now, only single character strings are allowed as symbols.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5679
     This method is redefined in String."
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5680
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5681
    ^ false
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5682
!
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5683
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5684
leftIndent
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5685
    "if the receiver starts with spaces, return the number of spaces
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5686
     at the left - otherwise, return 0.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5687
     If the receiver consists of spaces only, return the receivers size."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5688
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5689
    |index "{Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5690
     end   "{Class: SmallInteger }"|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5691
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5692
    index := 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5693
    end := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5694
    [index <= end] whileTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5695
	(self at:index) isSeparator ifFalse:[^ index - 1].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5696
	index := index + 1
8350
d9aaa0c937cb +isValidSmalltalkIdentifier
Claus Gittinger <cg@exept.de>
parents: 8347
diff changeset
  5697
    ].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5698
    ^ end
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5699
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
     '    hello' leftIndent
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5702
     'foo      ' leftIndent
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5703
     '         ' leftIndent
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5704
    "
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5705
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5706
    "Modified: 20.4.1996 / 19:28:43 / cg"
8350
d9aaa0c937cb +isValidSmalltalkIdentifier
Claus Gittinger <cg@exept.de>
parents: 8347
diff changeset
  5707
!
d9aaa0c937cb +isValidSmalltalkIdentifier
Claus Gittinger <cg@exept.de>
parents: 8347
diff changeset
  5708
10437
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5709
nameSpaceSelectorParts
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5710
    "Answer the namespace and baseSelector parts of a namespace selector.
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5711
     Namespace selectors are those generated by sends from a method in a different
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5712
     namespace; they are prefixed by ':'<ns>'::'.
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5713
     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
  5714
     Experimental"
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5715
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5716
    |nsPart selPart idx|
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5717
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5718
    (self at:1) == $: ifFalse:[^ Array with:'' with:self].
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5719
    idx := self indexOf:$: startingAt:3.
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5720
    idx == 0 ifTrue:[^ Array with:'' with:self].
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5721
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5722
    (idx+2 > self size) ifTrue:[^ Array with:'' with:self].
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5723
    (self at:idx+1) == $: ifFalse:[^ Array with:'' with:self].
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5724
    nsPart := self copyFrom:2 to:idx-1.
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5725
    selPart := self copyFrom:idx+2.
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5726
    ^ Array with:nsPart with:selPart
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5727
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5728
    "test:
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5729
     self assert:('+' nameSpaceSelectorParts) = #('' '+').
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5730
     self assert:(':+' nameSpaceSelectorParts) = #('' ':+').
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5731
     self assert:(':Foo:+' nameSpaceSelectorParts) = #('' ':Foo:+').
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5732
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5733
     self assert:(':Foo::+' nameSpaceSelectorParts) = #('Foo' '+').
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5734
     self assert:(':Foo::bar:baz:' nameSpaceSelectorParts) = #('Foo' 'bar:baz:').
10437
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5735
    "
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5736
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5737
    "Created: / 05-03-2007 / 17:16:58 / cg"
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5738
    "Modified: / 06-03-2007 / 11:51:15 / cg"
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5739
!
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5740
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5741
stringSpecies
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5742
    "return the underlying strings bitsPerCharacter
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  5743
     (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
  5744
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  5745
    |string|
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  5746
15523
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5747
    string := self string.
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5748
    string == self ifTrue:[^ self species].
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  5749
    ^ string stringSpecies
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  5750
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  5751
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5752
     'hello' stringSpecies
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5753
     'hello' asText allBold stringSpecies
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
!
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  5756
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  5757
widthFrom:startIndex to:endIndex on:aGC
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  5758
    "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
  5759
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  5760
    ^ (aGC font onDevice:aGC device) widthOf:self from:startIndex to:endIndex
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  5761
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  5762
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5763
     'hello world' widthFrom:1 to:5 on:(View new)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5764
     'hello' widthOn:(View new)
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  5765
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5766
!
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  5767
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5768
widthOn:aGC
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5769
    "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
  5770
6528
cf4e93b8104b #on: -> #onDevice
Claus Gittinger <cg@exept.de>
parents: 6523
diff changeset
  5771
    ^ (aGC font onDevice:aGC device) widthOf:self
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5772
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5773
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5774
     'hello world' widthOn:(View new)
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5775
    "
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5776
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5777
    "Created: 12.5.1996 / 20:09:29 / cg"
2554
309ee6707322 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2551
diff changeset
  5778
    "Modified: 17.4.1997 / 12:50:23 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5779
! !
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5780
18721
0cbaff816be6 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18671
diff changeset
  5781
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5782
!CharacterArray methodsFor:'special string converting'!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5783
16759
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  5784
asUnixFilenameString
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  5785
    "return a new string consisting of receiver's characters
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  5786
     with all \-characters replaced by /-characters.
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  5787
     If there are no backslashes, return the original"
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  5788
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  5789
    ^ self copyReplaceAll:$\ with:$/ ifNone:self
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  5790
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  5791
    "
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  5792
     'hello\world' asUnixFilenameString
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  5793
    "
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  5794
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  5795
    "Modified: / 18.7.1998 / 22:53:02 / cg"
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  5796
!
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  5797
14768
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5798
expandPlaceholders:escapeCharacter with:argArrayOrDictionary
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5799
    "this is the generic version of the old %-escaping method, allowing for an arbitrary
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5800
     escape character to be used (typically $$ or $% are effectively used).
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5801
     Return a copy of the receiver, where all %i escapes are
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5802
     replaced by corresponding arguments' printStrings from the argArrayOrDictionary.
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5803
     I.e. 'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this') results
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5804
     in the new string 'hello world; how is this'.
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5805
     As an extension, the argument may also be a dictionary, providing
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5806
     values for symbolic keys.
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5807
     In this case, %a .. %z and %(...) are also allowed.
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5808
     (%1..%9 require a numeric key in the dictionary, however)
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5809
     To get a '%' character, use a '%%'-escape.
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5810
     To get an integer-indexed placeHolder followed by another digit,
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5811
     or an index > 9, you must use %(digit).
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5812
     See also bindWith:... for VisualAge compatibility."
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5813
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5814
    |stream|
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5815
18269
77a84c6693c8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18194
diff changeset
  5816
    stream := (TextStream ? CharacterWriteStream) on:(self species uninitializedNew:self size + 20).
14768
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5817
    self expandPlaceholders:escapeCharacter with:argArrayOrDictionary on:stream.
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5818
    ^ stream contents.
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5819
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5820
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5821
    "
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5822
     'hello %1' expandPlaceholdersWith:#('world')
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5823
     'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this')
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5824
     'hello %2; how is %1' expandPlaceholdersWith:#('world' 'this')
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5825
     '%1 plus %2 gives %3 ' expandPlaceholdersWith:#(4 5 9)
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5826
     '%%(1)0 gives %(1)0' expandPlaceholdersWith:#(123)
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5827
     '%%10 gives %10' expandPlaceholdersWith:#(123)
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5828
     '%%(10) gives %(10)' expandPlaceholdersWith:#(123)
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5829
     '%test gives %1' expandPlaceholdersWith:#(123)
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5830
     'bla %1 bla' expandPlaceholdersWith:{ 'hello' allBold }
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5831
     'bla %1 bla' expandPlaceholdersWith:{ 'hello' }
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5832
    "
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5833
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5834
    "
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5835
     |dict|
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5836
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5837
     dict := Dictionary new.
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5838
     dict at:1 put:'one'.
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5839
     dict at:$a put:'AAAAA'.
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5840
     dict at:$b put:[ Time now ].
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5841
     dict at:'foo' put:[ Date today ].
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5842
     'hello $1 %a $b %(foo) $foo ' expandPlaceholders:$$ with:dict.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5843
     'hello $1 %a $b %(foo) $foo ' expandPlaceholders:$% with:dict.
14768
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5844
    "
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5845
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5846
    "Modified: 1.7.1997 / 00:53:24 / cg"
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5847
!
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5848
14765
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5849
expandPlaceholders:escapeCharacter with:argArrayOrDictionary on:aStream
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5850
    "this is the generic version of the old %-escaping method, allowing for an arbitrary
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5851
     escape character to be used (typically $$ or $% are effectively used).
18425
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5852
14765
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5853
     Write the receiver to aStream, where all %i escapes are
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5854
     replaced by corresponding arguments' printStrings from the argArrayOrDictionary.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5855
     I.e. 'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this') results
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5856
     in the new string 'hello world; how is this'.
18425
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5857
17192
dc09b5644f84 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17191
diff changeset
  5858
     As an extension, the argument may also be a dictionary, providing values for symbolic keys.
14765
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5859
     In this case, %a .. %z and %(...) are also allowed.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5860
     (%1..%9 require a numeric key in the dictionary, however)
17192
dc09b5644f84 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17191
diff changeset
  5861
     Also, the values in argArrayOrDictionary may be blocks.
18425
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5862
14765
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5863
     To get a '%' character, use a '%%'-escape.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5864
     To get an integer-indexed placeHolder followed by another digit,
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5865
     or an index > 9, you must use %(digit).
18425
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5866
14765
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5867
     See also bindWith:... for VisualAge compatibility.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5868
     Use %<cr> to insert a CR and %<tab> to insert a TAB."
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5869
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5870
    |next v key
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5871
     idx   "{ SmallInteger }"
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5872
     idx2  "{ SmallInteger }"
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5873
     start "{ SmallInteger }"
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5874
     stop  "{ SmallInteger }"|
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5875
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5876
    stop := self size.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5877
    start := 1.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5878
    [start <= stop] whileTrue:[
18425
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5879
        idx := self indexOf:escapeCharacter startingAt:start.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5880
        (idx == 0 or:[idx == stop]) ifTrue:[
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5881
            aStream nextPutAll:self startingAt:start to:stop.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5882
            ^ self.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5883
        ].
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5884
        "found an escapeCharacter"
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5885
        aStream nextPutAll:self startingAt:start to:(idx - 1).
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5886
        next := self at:(idx + 1).
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5887
        (next == escapeCharacter) ifTrue:[
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5888
            aStream nextPut:escapeCharacter.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5889
        ] ifFalse:[
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5890
            next == $< ifTrue:[
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5891
                idx2 := self indexOf:$> startingAt:idx+2.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5892
                key := self copyFrom:idx+2 to:idx2-1.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5893
                idx := idx2 - 1.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5894
                key := key asSymbolIfInterned.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5895
                (#(cr tab nl return lf ff null) includesIdentical:key) ifTrue:[
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5896
                    aStream nextPut:(Character perform:key).
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5897
                ].
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5898
            ] ifFalse:[
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5899
                next isDigit ifTrue:[
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5900
                    v := argArrayOrDictionary at:(next digitValue) ifAbsent:''
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5901
                ] ifFalse:[
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5902
                    next == $( ifTrue:[
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5903
                        idx2 := self indexOf:$) startingAt:idx+2.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5904
                        key := self copyFrom:idx+2 to:idx2-1.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5905
                        idx := idx2 - 1.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5906
                        (argArrayOrDictionary includesKey:key) ifTrue:[
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5907
                            v := argArrayOrDictionary at:key
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5908
                        ] ifFalse:[
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5909
                            key := key asSymbolIfInterned ? key.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5910
                            (argArrayOrDictionary includesKey:key) ifTrue:[
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5911
                                v := argArrayOrDictionary at:key
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5912
                            ] ifFalse:[
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5913
                                (key size == 1 and:[ argArrayOrDictionary includesKey:(key at:1)]) ifTrue:[
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5914
                                    v := argArrayOrDictionary at:(key at:1)
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5915
                                ] ifFalse:[
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5916
                                    key isNumeric ifTrue:[
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5917
                                        key := Integer readFrom:key onError:nil.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5918
                                    ].
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5919
                                    v := argArrayOrDictionary at:key ifAbsent:''
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5920
                                ]
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5921
                            ].
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5922
                        ].
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5923
                    ] ifFalse:[
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5924
                        (next isLetter and:[argArrayOrDictionary isSequenceable not "is a Dictionary"]) ifTrue:[
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5925
                            "so next is a non-numeric single character."
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5926
                            v := argArrayOrDictionary
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5927
                                    at:next
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5928
                                    ifAbsent:[
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5929
                                        "try symbol instead of character"
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5930
                                        argArrayOrDictionary
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5931
                                            at:next asSymbol
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5932
                                            ifAbsent:[String with:escapeCharacter with:next].
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5933
                                 ].
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5934
                        ] ifFalse:[
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5935
                            v := String with:$% with:next.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5936
                        ].
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5937
                    ]
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5938
                ].
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5939
                "/ v notNil ifTrue:[
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5940
                    v isBlock ifTrue:[
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5941
                        v := v value
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5942
                    ].
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5943
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5944
                    v printOn:aStream.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5945
                "/ ].
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5946
            ]
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5947
        ].
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5948
        start := idx + 2
14765
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5949
    ].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5950
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5951
    "
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5952
     String streamContents:[:s|
18425
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5953
        'hello %1' expandPlaceholders:$% with:#('world') on:s.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5954
        s cr.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5955
        'hello $1; how is $2' expandPlaceholders:$$ with:#('world' 'this') on:s.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5956
        s cr.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5957
        'hello %2; how is %1' expandPlaceholders:$% with:#('world' 'this') on:s.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5958
        s cr.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5959
        '%1 plus %2 gives %3 ' expandPlaceholders:$% with:#(4 5 9) on:s.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5960
        s cr.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5961
        '%%(1)0 gives %(1)0' expandPlaceholders:$% with:#(123) on:s.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5962
        s cr.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5963
        '%%10 gives %10' expandPlaceholders:$% with:#(123) on:s.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5964
        s cr.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5965
        '%%(10) gives %(10) %<cr>%<tab>next line' expandPlaceholders:$% with:#(123) on:s.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5966
        s cr.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5967
        '%%test gives %test' expandPlaceholders:$% with:#(123) on:s.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5968
        s cr.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5969
        '|%%<tab>|%%1|%%<cr>| gives |%<tab>|%1|%<cr>|' expandPlaceholders:$% with:#(foo) on:s.
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  5970
     ]
14765
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5971
    "
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5972
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5973
    "
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5974
     |dict|
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5975
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5976
     dict := Dictionary new.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5977
     dict at:1 put:'one'.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5978
     dict at:$a put:'AAAAA'.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5979
     dict at:$b put:[ Time now ].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5980
     String streamContents:[:s|
18425
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5981
         'hello $1 $a $b' expandPlaceholders:$$ with:dict on:s.
14765
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5982
     ].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5983
    "
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5984
18425
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5985
    "using blocks:
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5986
     |dict|
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5987
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5988
     dict := Dictionary new.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5989
     dict at:'time' put:[Time now printString].
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5990
     dict at:'date' put:[Date today printString].
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5991
     String streamContents:[:s|
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5992
         'it is $(time) $(date)' expandPlaceholders:$$ with:dict on:s.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5993
     ].
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5994
    "
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  5995
    
14765
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5996
    "Modified: / 18-11-2010 / 15:43:28 / cg"
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5997
!
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5998
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5999
expandPlaceholdersWith:argArrayOrDictionary
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6000
    "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
  6001
     replaced by corresponding arguments' printStrings from the argArrayOrDictionary.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6002
     I.e. 'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this') results
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6003
     in the new string 'hello world; how is this'.
18425
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  6004
     
4410
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  6005
     As an extension, the argument may also be a dictionary, providing
7313
9be9b35f5370 comment
Claus Gittinger <cg@exept.de>
parents: 7312
diff changeset
  6006
     values for symbolic keys.
4842
0086acd80497 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  6007
     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
  6008
     (%1..%9 require a numeric key in the dictionary, however)
18425
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  6009
     Also, the values in argArrayOrDictionary may be blocks.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  6010
     
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6011
     To get a '%' character, use a '%%'-escape.
7313
9be9b35f5370 comment
Claus Gittinger <cg@exept.de>
parents: 7312
diff changeset
  6012
     To get an integer-indexed placeHolder followed by another digit,
9be9b35f5370 comment
Claus Gittinger <cg@exept.de>
parents: 7312
diff changeset
  6013
     or an index > 9, you must use %(digit).
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6014
     See also bindWith:... for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6015
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6016
    |stream|
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6017
18269
77a84c6693c8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18194
diff changeset
  6018
    stream := (TextStream ? CharacterWriteStream) on:(self species uninitializedNew:self size + 20).
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6019
    self expandPlaceholdersWith:argArrayOrDictionary on:stream.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6020
    ^ stream contents.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6021
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6022
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6023
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6024
     'hello %1' expandPlaceholdersWith:#('world')
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6025
     'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this')
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6026
     'hello %2; how is %1' expandPlaceholdersWith:#('world' 'this')
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6027
     '%1 plus %2 gives %3 ' expandPlaceholdersWith:#(4 5 9)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6028
     '%%(1)0 gives %(1)0' expandPlaceholdersWith:#(123)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6029
     '%%10 gives %10' expandPlaceholdersWith:#(123)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6030
     '%%(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
  6031
     '%test gives %1' expandPlaceholdersWith:#(123)
11028
cb1ee3ddd91a expandPlaceHolders: care fr Text with emphasis
Claus Gittinger <cg@exept.de>
parents: 11018
diff changeset
  6032
     'bla %1 bla' expandPlaceholdersWith:{ 'hello' allBold }
cb1ee3ddd91a expandPlaceHolders: care fr Text with emphasis
Claus Gittinger <cg@exept.de>
parents: 11018
diff changeset
  6033
     'bla %1 bla' expandPlaceholdersWith:{ 'hello' }
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6034
    "
1026
455c9f609f4d care for 16bit strings in expandPlaceHolders
Claus Gittinger <cg@exept.de>
parents: 1025
diff changeset
  6035
4410
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  6036
    "
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  6037
     |dict|
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  6038
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  6039
     dict := Dictionary new.
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  6040
     dict at:1 put:'one'.
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  6041
     dict at:$a put:'AAAAA'.
8794
a5df33935142 nindWith supports blocks in the value dictionary
Claus Gittinger <cg@exept.de>
parents: 8710
diff changeset
  6042
     dict at:$b put:[ Time now ].
12316
3e78905d70a9 comment/format in: #expandPlaceholdersWith:
Claus Gittinger <cg@exept.de>
parents: 12196
diff changeset
  6043
     dict at:'foo' put:[ Date today ].
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  6044
     '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
  6045
    "
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  6046
2737
9f29aecea39d care for % at end in expandPlaceHolders.
Claus Gittinger <cg@exept.de>
parents: 2736
diff changeset
  6047
    "Modified: 1.7.1997 / 00:53:24 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6048
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6049
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6050
expandPlaceholdersWith:argArrayOrDictionary on:aStream
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6051
    "write the receiver to aStream, where all %i escapes are
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6052
     replaced by corresponding arguments' printStrings from the argArrayOrDictionary.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6053
     I.e. 'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this') results
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6054
     in the new string 'hello world; how is this'.
18425
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  6055
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6056
     As an extension, the argument may also be a dictionary, providing
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6057
     values for symbolic keys.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6058
     In this case, %a .. %z and %(...) are also allowed.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6059
     (%1..%9 require a numeric key in the dictionary, however)
18425
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  6060
     Also, the values in argArrayOrDictionary may be blocks.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  6061
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6062
     To get a '%' character, use a '%%'-escape.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6063
     To get an integer-indexed placeHolder followed by another digit,
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6064
     or an index > 9, you must use %(digit).
18425
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  6065
10935
7142eab95639 #expandPlaceHoldersWith:in:
Stefan Vogel <sv@exept.de>
parents: 10929
diff changeset
  6066
     See also bindWith:... for VisualAge compatibility.
10939
d0ca31c1d1e9 #expandPlaceHoldersWith: handle %<cr> %<tab> etc
Stefan Vogel <sv@exept.de>
parents: 10935
diff changeset
  6067
     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
  6068
14765
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  6069
    ^ self expandPlaceholders:$% with:argArrayOrDictionary on:aStream
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6070
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6071
    "
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6072
     String streamContents:[:s|
18425
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  6073
        'hello %1' expandPlaceholdersWith:#('world') on:s.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  6074
        s cr.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  6075
        'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this') on:s.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  6076
        s cr.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  6077
        'hello %2; how is %1' expandPlaceholdersWith:#('world' 'this') on:s.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  6078
        s cr.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  6079
        '%1 plus %2 gives %3 ' expandPlaceholdersWith:#(4 5 9) on:s.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  6080
        s cr.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  6081
        '%%(1)0 gives %(1)0' expandPlaceholdersWith:#(123) on:s.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  6082
        s cr.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  6083
        '%%10 gives %10' expandPlaceholdersWith:#(123) on:s.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  6084
        s cr.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  6085
        '%%(10) gives %(10) %<cr>%<tab>next line' expandPlaceholdersWith:#(123) on:s.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  6086
        s cr.
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  6087
        '%test gives %1' expandPlaceholdersWith:#(123) on:s.
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6088
     ]
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6089
    "
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6090
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6091
    "
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6092
     |dict|
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6093
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6094
     dict := Dictionary new.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6095
     dict at:1 put:'one'.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6096
     dict at:$a put:'AAAAA'.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6097
     dict at:$b put:[ Time now ].
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6098
     String streamContents:[:s|
18425
db49c54b84d2 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18392
diff changeset
  6099
         'hello %1 %a %b' expandPlaceholdersWith:dict on:s.
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6100
     ].
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6101
    "
13008
a27647c36b31 changed: #expandPlaceholdersWith:on:
Claus Gittinger <cg@exept.de>
parents: 12925
diff changeset
  6102
13138
d2eb0eba5907 changed: #expandPlaceholdersWith:on:
Claus Gittinger <cg@exept.de>
parents: 13137
diff changeset
  6103
    "Modified: / 18-11-2010 / 15:43:28 / cg"
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6104
!
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6105
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6106
firstLine
14405
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  6107
    "return the first line of a multiline string"
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  6108
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  6109
    ^ self asCollectionOfSubCollectionsSeparatedBy:(Character cr) do:[:line | ^ line].
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6110
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6111
    "
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6112
     'hello' firstLine
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6113
     '1\2\3' withCRs firstLine
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6114
     '\1\2\3' withCRs firstLine
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6115
    "
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6116
!
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6117
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6118
tokensBasedOn:aCharacter
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6119
    "this is an ST-80 alias for the ST/X method
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6120
	asCollectionOfSubstringsSeparatedBy:"
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6121
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6122
    ^ self asCollectionOfSubstringsSeparatedBy:aCharacter
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6123
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6124
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6125
     'hello:world:isnt:this nice' tokensBasedOn:$:
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6126
     'foo,bar,baz' tokensBasedOn:$,
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6127
     '/etc/passwd' asFilename readStream nextLine tokensBasedOn:$:
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6128
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6129
!
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6130
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6131
withCEscapes
16863
6235ea959712 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16855
diff changeset
  6132
    "return a new string consisting of receiver's characters
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6133
     with all special and unprintable characters replaced by \X-character escapes.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6134
     (similar to the way C-language literal Strings are represented).
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6135
     The resulting string will contain only 7-bit ascii characters.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6136
     Emphasis is not supported.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6137
     The following escapes are generated:
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6138
	\'      single quote character
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6139
	\dQuote double quote character
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6140
	\r      return character
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6141
	\r      return character
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6142
	\n      newline character
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6143
	\t      tab character
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6144
	\\      the \ character itself
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6145
	\xnn    two digit hex number defining the characters ascii value
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6146
	\unnnn  four digit hex number defining the characters ascii value
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6147
	\Unnnnnnnn  eight digit hex number defining the characters ascii value
16863
6235ea959712 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16855
diff changeset
  6148
     This is the opposite of withoutCEscapes.
17000
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6149
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6150
     Sigh: this is named completely wrong (opposite naming of withCRs/witoutCRs),
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6151
	   but it cannot be changed easily, as these methods are already used heavily
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6152
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6153
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6154
    |anyEscapeNeeded out seq|
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6155
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6156
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6157
     first, check if any escape is needed and return the receiver unchanged if not
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6158
    "
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6159
    anyEscapeNeeded := self
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6160
			contains:[:ch |
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6161
			    ((ch codePoint between:32 and:126) not
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6162
			    or:[ch == $' or:[ch == $"]])
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6163
			].
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6164
    anyEscapeNeeded ifFalse:[ ^ self ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6165
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6166
    self hasChangeOfEmphasis ifTrue:[ self error:'emphasis not supported' ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6167
18269
77a84c6693c8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18194
diff changeset
  6168
    out := WriteStream on:(String uninitializedNew:self size-1).
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6169
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6170
    self do:[:ch |
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6171
	|cp|
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6172
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6173
	(ch == $' or:[ch == $"]) ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6174
	    out nextPut:$\.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6175
	    out nextPut:ch.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6176
	] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6177
	    (ch codePoint between:32 and:126) ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6178
		out nextPut:ch
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6179
	    ] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6180
		ch == Character return ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6181
		    seq := '\r'
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6182
		] ifFalse:[ ch == Character nl ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6183
		    seq := '\n'
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6184
		] ifFalse:[ ch == Character tab ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6185
		    seq := '\t'
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6186
		] ifFalse:[ ch == $\ ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6187
		    seq := '\\'
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6188
		] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6189
		    cp := ch codePoint.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6190
		    cp <= 16rFF ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6191
			seq := '\x' , (cp printStringRadix:16 padTo:2)
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6192
		    ] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6193
			cp <= 16rFFFF ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6194
			    seq := '\u' , (cp printStringRadix:16 padTo:4)
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6195
			] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6196
			    seq := '\U',(cp printStringRadix:16 padTo:8)
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6197
			]
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6198
		    ]
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6199
		]]]].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6200
		out nextPutAll:seq
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6201
	    ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6202
	].
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6203
    ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6204
    ^ out contents
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6205
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6206
    "
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6207
     'hello\n\tworld' withoutCEscapes.
17000
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6208
     'hello\nworld\na\n\tnice\n\t\tstring' withoutCEscapes withCEscapes.
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6209
     ('hello ',(Character value:16r1234),' world') withCEscapes
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6210
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6211
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6212
    "Created: / 25-01-2012 / 11:08:16 / cg"
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6213
!
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6214
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6215
withCRs
17205
b266cb703584 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17192
diff changeset
  6216
    "return a new string consisting of the receiver's characters
16757
da377b8c79f5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16738
diff changeset
  6217
     with all \-characters replaced by cr-characters.
da377b8c79f5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16738
diff changeset
  6218
     If there are no backslashes, return the original"
da377b8c79f5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16738
diff changeset
  6219
16759
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  6220
    ^ self copyReplaceAll:$\ with:(Character cr) ifNone:self
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6221
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6222
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6223
     'hello\world' withCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6224
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6225
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6226
    "Modified: / 18.7.1998 / 22:53:02 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6227
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6228
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6229
withEscapes
15405
ef2e23943761 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15400
diff changeset
  6230
    <resource: #obsolete>
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6231
    "has been renamed; the name withEscapes is misleading"
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6232
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6233
    self obsoleteMethodWarning:'use withoutCEscapes'.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6234
    ^ self withoutCEscapes.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6235
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6236
    "Modified: / 25-01-2012 / 10:42:30 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6237
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6238
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6239
withMatchEscapes
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6240
    "return a copy of the receiver with all match characters escaped
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6241
     by $\ characters (to be usable as a match string).
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6242
     Return the receiver, if there are none."
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6243
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  6244
    |in out c escape|
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  6245
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  6246
    escape := self class matchEscapeCharacter.
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6247
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6248
    in := self readStream.
7986
715c72e62d58 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7982
diff changeset
  6249
    out := WriteStream on:(self species new:self size).
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6250
    [in atEnd] whileFalse:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6251
	c := in next.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6252
	(c == escape or:['*[#' includes:c]) ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6253
	    out nextPut:$\.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6254
	].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6255
	out nextPut:c.
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6256
    ].
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6257
    ^ out contents.
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6258
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6259
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6260
     '*foo' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6261
     '\*foo' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6262
     '*foo' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6263
     '\\*foo' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6264
     'foo*' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6265
     'foo\*' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6266
     'foo\' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6267
     'f*o*o' withMatchEscapes
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6268
    "
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6269
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6270
    "Modified: 2.4.1997 / 18:13:04 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6271
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6272
14992
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6273
withSeparatorsCompacted
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6274
    "return a new string with each sequence of whiteSpace replaced by a single space character.
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6275
     Preserves a leading/trailing space."
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6276
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6277
    ^ self species streamContents:[:s |
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6278
	|skipping|
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6279
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6280
	skipping := false.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6281
	1 to:self size do:[:idx |
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6282
	    |char|
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6283
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6284
	    char := self at:idx.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6285
	    char isSeparator ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6286
		s nextPut:char.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6287
		skipping := false.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6288
	    ] ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6289
		skipping ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6290
		    s nextPut:(Character space).
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6291
		    skipping := true
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6292
		].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6293
	    ]
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6294
	]
14992
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6295
    ]
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6296
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6297
    "
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6298
     'hello wwww'         withSeparatorsCompacted
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6299
     'hello    wwww'      withSeparatorsCompacted
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6300
     '  hello wwww'       withSeparatorsCompacted
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6301
     '  hello wwww   '    withSeparatorsCompacted
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6302
     '  hello    wwww   ' withSeparatorsCompacted
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6303
     'hel   lo www   w'   withSeparatorsCompacted
14992
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6304
    "
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6305
!
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6306
18464
6b4a8707ff96 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18463
diff changeset
  6307
withSeparatorsReplacedBy:replacementCharacter
6b4a8707ff96 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18463
diff changeset
  6308
    "return a new string with each separator (whitespace) replaced by replacementCharacter.
6b4a8707ff96 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18463
diff changeset
  6309
     Typically used with space as replacementCharacter"
6b4a8707ff96 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18463
diff changeset
  6310
6b4a8707ff96 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18463
diff changeset
  6311
    ^ self species streamContents:[:s |
6b4a8707ff96 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18463
diff changeset
  6312
        self do:[:ch |
6b4a8707ff96 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18463
diff changeset
  6313
            ch isSeparator ifTrue:[
6b4a8707ff96 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18463
diff changeset
  6314
                s nextPut:replacementCharacter
6b4a8707ff96 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18463
diff changeset
  6315
            ] ifFalse:[    
6b4a8707ff96 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18463
diff changeset
  6316
                s nextPut:ch.
6b4a8707ff96 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18463
diff changeset
  6317
            ]
6b4a8707ff96 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18463
diff changeset
  6318
        ]
6b4a8707ff96 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18463
diff changeset
  6319
    ]
6b4a8707ff96 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18463
diff changeset
  6320
6b4a8707ff96 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18463
diff changeset
  6321
    "
6b4a8707ff96 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18463
diff changeset
  6322
     'hello wwww'         withSeparatorsReplacedBy:$*
6b4a8707ff96 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18463
diff changeset
  6323
     'hello ww ww'        withSeparatorsReplacedBy:$*
6b4a8707ff96 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18463
diff changeset
  6324
     '  hello wwww'       withSeparatorsReplacedBy:$*
6b4a8707ff96 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18463
diff changeset
  6325
     'hel   lo www   w'   withSeparatorsReplacedBy:$*
6b4a8707ff96 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18463
diff changeset
  6326
     'hel
6b4a8707ff96 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18463
diff changeset
  6327
 lo www
6b4a8707ff96 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18463
diff changeset
  6328
w'   withSeparatorsReplacedBy:$*
6b4a8707ff96 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18463
diff changeset
  6329
    "
6b4a8707ff96 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18463
diff changeset
  6330
!
6b4a8707ff96 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18463
diff changeset
  6331
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6332
withTabs
735
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  6333
    "return a string consisting of the receivers characters
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  6334
     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
  6335
     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
  6336
     otherwise a new string is returned.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6337
     Limitation: only the very first spaces are replaced
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6338
		 (i.e. if the receiver contains newLine characters,
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6339
		  no tabs are inserted after those lineBreaks)"
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6340
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6341
    |idx   "{ SmallInteger }"
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6342
     nTabs "{ SmallInteger }"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6343
     newString|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6344
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6345
    idx := self findFirst:[:c | (c ~~ Character space)].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6346
    nTabs := (idx-1) // 8.
5815
4acdd87a77d4 // can return negative numbers.
Stefan Vogel <sv@exept.de>
parents: 5795
diff changeset
  6347
    nTabs <= 0 ifTrue:[^ self].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6348
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6349
    "any tabs"
15523
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  6350
    newString := self species new:(self size - (nTabs * 7)).
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6351
    newString atAll:(1 to:nTabs) put:(Character tab).
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6352
    newString replaceFrom:(nTabs + 1) with:self startingAt:(nTabs * 8 + 1).
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6353
    ^ newString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6354
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6355
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6356
     '12345678901234567890' withTabs
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6357
     '       8901234567890' withTabs
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6358
     '        901234567890' withTabs
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6359
     '               67890' withTabs
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6360
     '                7890' withTabs
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6361
     '                 890' withTabs
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6362
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6363
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6364
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6365
withTabsExpanded
735
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  6366
    "return a string consisting of the receivers characters,
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6367
     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
  6368
     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
  6369
     otherwise a new string is returned.
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  6370
     This does handle multiline strings."
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6371
5741
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  6372
    ^ self withTabsExpanded:8
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  6373
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  6374
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6375
     ('1' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6376
     ('12345' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6377
     ('123456' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6378
     ('1234567' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6379
     ('12345678' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6380
     ('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
  6381
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  6382
     (String with:Character tab
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6383
	     with:Character tab
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6384
	     with:$1) withTabsExpanded
5741
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  6385
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  6386
     (String with:Character tab
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6387
	     with:$1
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6388
	     with:Character tab
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6389
	     with:$2) withTabsExpanded
5741
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  6390
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  6391
     (String with:Character tab
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6392
	     with:$1
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6393
	     with:Character cr
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6394
	     with:Character tab
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6395
	     with:$2) withTabsExpanded
5741
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  6396
    "
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  6397
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  6398
    "Modified: 12.5.1996 / 13:05:10 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6399
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6400
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6401
withTabsExpanded:numSpaces
5741
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  6402
    "return a string consisting of the receivers characters,
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6403
     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
  6404
     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
  6405
     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
  6406
     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
  6407
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6408
    |col    "{ SmallInteger }"
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6409
     str ch
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6410
     dstIdx "{ SmallInteger }"
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6411
     newSz  "{ SmallInteger }"
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6412
     sz "{ SmallInteger }"
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6413
     hasEmphasis e|
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6414
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6415
    (self includes:(Character tab)) ifFalse:[^ self].
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6416
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6417
    sz := self size.
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6418
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6419
    "/ count the new size first, instead of
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6420
    "/ multiple resizing (better for large strings)
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6421
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6422
    col := 1. newSz := 0.
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6423
    1 to:sz do:[:srcIdx |
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6424
	ch := self at:srcIdx.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6425
	ch == Character tab ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6426
	    col := col + 1.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6427
	    newSz := newSz + 1.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6428
	    ch == Character cr ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6429
		col := 1
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6430
	    ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6431
	] ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6432
	    (col \\ numSpaces) to:numSpaces do:[:ii |
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6433
		newSz := newSz + 1.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6434
		col := col + 1
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6435
	    ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6436
	]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6437
    ].
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6438
18258
9f83d8bddcf0 Fix in CharacterArray>>withTabsExpanded: - case for Unicode16/Unicode32 strings
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 18200
diff changeset
  6439
    self isText ifTrue:[ 
9f83d8bddcf0 Fix in CharacterArray>>withTabsExpanded: - case for Unicode16/Unicode32 strings
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 18200
diff changeset
  6440
        str := Text string: (self string class new: newSz).
9f83d8bddcf0 Fix in CharacterArray>>withTabsExpanded: - case for Unicode16/Unicode32 strings
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 18200
diff changeset
  6441
    ] ifFalse:[
9f83d8bddcf0 Fix in CharacterArray>>withTabsExpanded: - case for Unicode16/Unicode32 strings
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 18200
diff changeset
  6442
        str := self species new:newSz.
9f83d8bddcf0 Fix in CharacterArray>>withTabsExpanded: - case for Unicode16/Unicode32 strings
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 18200
diff changeset
  6443
    ].
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6444
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6445
    hasEmphasis := self hasChangeOfEmphasis.
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6446
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6447
    col := 1. dstIdx := 1.
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6448
    1 to:sz do:[:srcIdx |
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6449
	ch := self at:srcIdx.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6450
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6451
	ch == Character tab ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6452
	    col := col + 1.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6453
	    ch == Character cr ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6454
		col := 1
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6455
	    ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6456
	    hasEmphasis ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6457
		e := self emphasisAt:srcIdx.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6458
		str emphasisAt:dstIdx put:e
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6459
	    ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6460
	    str at:dstIdx put:ch.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6461
	    dstIdx := dstIdx + 1
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6462
	] ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6463
	    (col \\ numSpaces) to:numSpaces do:[:ii |
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6464
		str at:dstIdx put:Character space.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6465
		dstIdx := dstIdx + 1.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6466
		col := col + 1
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6467
	    ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6468
	]
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6469
    ].
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6470
    ^ str
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6471
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6472
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6473
     ('1' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6474
     ('1' , Character tab asString , 'x') withTabsExpanded:4
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6475
     ('12345' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6476
     ('123456' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6477
     ('1234567' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6478
     ('12345678' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6479
     ('123456789' , Character tab asString , 'x') withTabsExpanded
735
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  6480
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6481
     (String with:Character tab
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6482
	     with:Character tab
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6483
	     with:$1) withTabsExpanded
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6484
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6485
     (String with:Character tab
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6486
	     with:$1
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6487
	     with:Character tab
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6488
	     with:$2) withTabsExpanded
735
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  6489
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  6490
     (String with:Character tab
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6491
	     with:$1
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6492
	     with:Character cr
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6493
	     with:Character tab
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6494
	     with:$2) withTabsExpanded
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6495
    "
735
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  6496
18258
9f83d8bddcf0 Fix in CharacterArray>>withTabsExpanded: - case for Unicode16/Unicode32 strings
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 18200
diff changeset
  6497
    "Modified: / 12-05-1996 / 13:05:10 / cg"
9f83d8bddcf0 Fix in CharacterArray>>withTabsExpanded: - case for Unicode16/Unicode32 strings
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 18200
diff changeset
  6498
    "Modified: / 21-04-2015 / 15:40:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6499
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6500
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6501
withoutAllSpaces
16855
c088880a590b class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16785
diff changeset
  6502
    "return a copy of the receiver with all whitespace removed"
c088880a590b class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16785
diff changeset
  6503
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6504
    ^ self asCollectionOfWords asStringWith:''.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6505
"/    |col string|
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6506
"/
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6507
"/    col := self asCollectionOfWords.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6508
"/    string := String new.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6509
"/    col do:[:el |
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6510
"/       string := string,el
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6511
"/    ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6512
"/    ^string
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6513
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6514
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6515
     'hello wwww'  withoutAllSpaces
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6516
     'hel   lo www   w'  withoutAllSpaces
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6517
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6518
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6519
    "Modified: / 18.7.1998 / 22:53:08 / cg"
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6520
!
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6521
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6522
withoutCEscapes
15628
4fe28df5850d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15605
diff changeset
  6523
    "return a new string consisting of receiver's characters
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6524
     with all \X-character escapes replaced by corresponding-characters.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6525
     (similar to the way C-language Strings are converted).
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6526
     The following escapes are supported:
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6527
	\r      return character
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6528
	\n      newline character
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6529
	\b      backspace character
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6530
	\f      formfeed character
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6531
	\t      tab character
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6532
	\e      escape character
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6533
	\\      the \ character itself
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6534
	\nnn    three digit octal number defining the characters ascii value
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6535
	\xnn    two digit hex number defining the characters ascii value
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6536
	\unnnn  four digit hex number defining the characters unicode value
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6537
	\Unnnnnnnn  eight digit hex number defining the characters unicode value
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6538
	\other  other
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6539
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6540
     Notice, that \' is NOT a valid escape, since the general syntax of
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6541
     string constants is not affected by this method.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6542
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6543
     Although easily implementable, this is NOT done automatically
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6544
     by the compiler (due to a lack of a language standard for this).
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6545
     However, the compiler may detect sends ot #withEscapes to string literals
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6546
     and place a modified string constant into the binary/byte-code.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6547
     Therefore, no runtime penalty will be payed for using these escapes.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6548
     (not in pre 2.11 versions)
16863
6235ea959712 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16855
diff changeset
  6549
6235ea959712 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16855
diff changeset
  6550
     This is the opposite of withCEscapes.
17000
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6551
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6552
     Sigh: this is named completely wrong (opposite naming of withCRs/witoutCRs),
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6553
	   but it cannot be changed easily, as these methods are already used heavily
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6554
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6555
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6556
    |val     "{ SmallInteger }"
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6557
     in out nextChar nDigits|
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6558
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6559
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6560
     first, see if there is any escape; if not, return the receiver unchanged
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6561
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6562
    (self includes:$\) ifFalse:[^ self ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6563
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6564
    self hasChangeOfEmphasis ifTrue:[ self error:'emphasis not supported' ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6565
    out := CharacterWriteStream on:(String new:self size - 1).
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6566
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6567
    in := ReadStream on:self.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6568
    [in atEnd] whileFalse:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6569
	nextChar := in next.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6570
	nextChar == $\ ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6571
	    in atEnd ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6572
	    ] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6573
		nextChar := in next.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6574
		nextChar == $r ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6575
		    nextChar := Character return
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6576
		] ifFalse:[ nextChar == $n ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6577
		    nextChar := Character nl
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6578
		] ifFalse:[ nextChar == $b ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6579
		    nextChar := Character backspace
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6580
		] ifFalse:[ nextChar == $f ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6581
		    nextChar := Character newPage
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6582
		] ifFalse:[ nextChar == $t ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6583
		    nextChar := Character tab
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6584
		] ifFalse:[ nextChar == $e ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6585
		    nextChar := Character esc
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6586
		] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6587
		    nextChar == $0 ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6588
			val := 0.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6589
			nextChar := in peek.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6590
			nDigits := 1.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6591
			[nextChar notNil and:[nextChar isDigit and:[nDigits <= 3]]] whileTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6592
			    val := (val * 8) + nextChar digitValue.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6593
			    nextChar := in nextPeek.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6594
			    nDigits := nDigits + 1.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6595
			].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6596
			nextChar := Character value:val.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6597
		    ] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6598
			val := 0.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6599
			nextChar == $x ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6600
			    2 timesRepeat:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6601
				nextChar := in next.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6602
				val := (val * 16) + nextChar digitValue.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6603
			    ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6604
			    nextChar := Character value:val.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6605
			] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6606
			    nextChar == $u ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6607
				4 timesRepeat:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6608
				    nextChar := in next.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6609
				    val := (val * 16) + nextChar digitValue.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6610
				].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6611
				nextChar := Character value:val.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6612
			    ] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6613
				nextChar == $U ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6614
				    8 timesRepeat:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6615
					nextChar := in next.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6616
					val := (val * 16) + nextChar digitValue.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6617
				    ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6618
				    nextChar := Character value:val.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6619
				]
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6620
			    ]
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6621
			]
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6622
		    ]
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6623
		]]]]]].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6624
	    ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6625
	].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6626
	out nextPut:nextChar.
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6627
    ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6628
    ^ out contents
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6629
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6630
    "
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6631
     'hello world' withoutCEscapes
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6632
     'hello\world' withoutCEscapes
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6633
     'hello\world\' withoutCEscapes
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6634
     'hello world\' withoutCEscapes
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6635
     'hello\tworld' withoutCEscapes
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6636
     'hello\nworld\na\n\tnice\n\t\tstring' withoutCEscapes
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6637
     'hello\tworld\n' withoutCEscapes
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6638
     'hello\010world' withoutCEscapes
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6639
     'hello\r\nworld' withoutCEscapes
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6640
     'hello\r\n\x08world' withoutCEscapes
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6641
     '0\x080' withoutCEscapes
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6642
     '0\u12340' withoutCEscapes
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6643
     '0\U123456780' withoutCEscapes
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6644
     '0\0a' withoutCEscapes
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6645
     '0\00a' withoutCEscapes
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6646
     '0\000a' withoutCEscapes
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6647
     '0\0000a' withoutCEscapes
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6648
     '0\00000a' withoutCEscapes
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6649
     '0\03770' withoutCEscapes
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6650
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6651
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6652
    "Created: / 25-01-2012 / 10:41:44 / cg"
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6653
!
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6654
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6655
withoutCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6656
    "return a new collection consisting of receivers elements
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6657
     with all cr-characters replaced by \-characters.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6658
     This is the reverse operation of withCRs."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6659
16759
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  6660
    ^ self copyReplaceAll:(Character cr) with:$\ ifNone:self
12319
18b80c2ce1e3 oops #withoutSeparators #withoutSpaces were noops
Claus Gittinger <cg@exept.de>
parents: 12317
diff changeset
  6661
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6662
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6663
     'hello
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6664
world' withoutCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6665
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6666
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6667
    "Modified: / 18.7.1998 / 22:53:08 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6668
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6669
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6670
withoutLeadingSeparators
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6671
    "return a copy of myself without leading separators.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6672
     Notice: this does remove tabs, newline or any other whitespace.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6673
     Returns an empty string, if the receiver consist only of whitespace."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6674
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6675
    |index|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6676
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6677
    index := self indexOfNonSeparatorStartingAt:1.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6678
    index ~~ 0 ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6679
	index == 1 ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6680
	    ^ self
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6681
	].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6682
	^ self copyFrom:index
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6683
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6684
    ^ ''
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6685
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6686
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6687
     '    foo    ' withoutLeadingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6688
     'foo    '     withoutLeadingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6689
     '    foo'     withoutLeadingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6690
     '       '     withoutLeadingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6691
     'foo'         withoutLeadingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6692
     ('  ' , Character tab asString , ' foo   ') withoutLeadingSeparators inspect
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6693
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6694
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6695
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6696
withoutMatchEscapes
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6697
    "return a copy of the receiver with all $\ removed or
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6698
     the receiver, if there are none."
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6699
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  6700
    |in out c escape|
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  6701
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  6702
    escape := self class matchEscapeCharacter.
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6703
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6704
    in := self readStream.
8222
f2c454a9a038 replaced '' writeStream by String writeStream
Claus Gittinger <cg@exept.de>
parents: 8124
diff changeset
  6705
    out := self species writeStream.
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6706
    [in atEnd] whileFalse:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6707
	c := in next.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6708
	c == escape ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6709
	    in atEnd ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6710
		c := in next.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6711
	    ]
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6712
	].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6713
	out nextPut:c.
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6714
    ].
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6715
    ^ out contents.
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6716
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6717
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6718
     '*foo' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6719
     '\*foo' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6720
     '*foo' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6721
     '\\*foo' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6722
     'foo*' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6723
     'foo\*' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6724
     'foo\' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6725
     'f\*o\*o' withoutMatchEscapes
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6726
    "
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6727
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6728
    "Modified: 30.6.1997 / 13:40:23 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6729
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6730
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6731
withoutPrefix:aString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6732
    "if the receiver startsWith aPrefix, return a copy without it.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6733
     Otherwise return the receiver"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6734
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6735
    (self startsWith:aString) ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6736
	^ self copyFrom:aString size + 1
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6737
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6738
    ^ self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6739
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6740
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6741
     'helloworld' withoutPrefix:'hello'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6742
     'helloworld' withoutPrefix:'foo'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6743
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6744
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6745
10671
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  6746
withoutQuotes
17000
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6747
    "/ remove quotes ($" and $') from the front and end of myself (if matching)"
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6748
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6749
    |firstChar|
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6750
17024
f0ef2620b98b class: CharacterArray
ca
parents: 17021
diff changeset
  6751
    self isEmpty ifTrue:[^ self].
f0ef2620b98b class: CharacterArray
ca
parents: 17021
diff changeset
  6752
17000
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6753
    firstChar := self first.
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6754
    ((firstChar == $") or:[firstChar == $']) ifFalse:[^ self].
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6755
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6756
    self last == firstChar ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6757
	^ self copyFrom:2 to:(self size-1)
10671
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  6758
    ].
17000
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6759
    ^ self
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6760
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6761
    "/
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6762
    "/ '"hello"' withoutQuotes
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6763
    "/ '''hello''' withoutQuotes
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6764
    "/ 'hello' withoutQuotes
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6765
    "/ '"hello' withoutQuotes
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6766
    "/ 'hello"' withoutQuotes
17000
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6767
    "/
10671
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  6768
!
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  6769
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6770
withoutSeparators
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6771
    "return a copy of myself without leading and trailing whitespace.
4156
3079a5a94617 comments
Claus Gittinger <cg@exept.de>
parents: 4117
diff changeset
  6772
     (but whiteSpace in-between is preserved)
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6773
     Whitespace is space, tab, newline, formfeed.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6774
     Use withoutSpaces, if you want to remove spaces only."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6775
12319
18b80c2ce1e3 oops #withoutSeparators #withoutSpaces were noops
Claus Gittinger <cg@exept.de>
parents: 12317
diff changeset
  6776
    ^ self trimForWhich:[:ch | ch isSeparator]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6777
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6778
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6779
     '    foo    ' withoutSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6780
     '    foo' withoutSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6781
     'foo    ' withoutSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6782
     '       ' withoutSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6783
     ('  foo' , Character tab asString , '    ') withoutSeparators inspect
12319
18b80c2ce1e3 oops #withoutSeparators #withoutSpaces were noops
Claus Gittinger <cg@exept.de>
parents: 12317
diff changeset
  6784
     '    foo    ' asUnicode16String withoutSeparators
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6785
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6786
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6787
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6788
withoutSpaces
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6789
    "return a copy of myself without leading and trailing spaces.
4156
3079a5a94617 comments
Claus Gittinger <cg@exept.de>
parents: 4117
diff changeset
  6790
     (but spaces in-between are preserved)
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6791
     Notice: this does NOT remove tabs, newline or any other whitespace.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6792
     Use withoutSeparators for this."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6793
12319
18b80c2ce1e3 oops #withoutSeparators #withoutSpaces were noops
Claus Gittinger <cg@exept.de>
parents: 12317
diff changeset
  6794
    ^ self trimForWhich:[:ch | ch == Character space]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6795
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6796
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6797
     '    foo    ' withoutSpaces
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6798
     'foo    '     withoutSpaces
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6799
     '    foo'     withoutSpaces
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6800
     '       '     withoutSpaces
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6801
     'a     b'     withoutSpaces
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6802
     ('  foo' , Character tab asString , '    ') withoutSpaces inspect
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6803
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6804
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6805
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6806
withoutTrailingSeparators
915
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  6807
    "return a copy of myself without trailing separators.
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  6808
     Notice: this does remove tabs, newline or any other whitespace.
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  6809
     Returns an empty string, if the receiver consist only of whitespace."
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  6810
12188
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  6811
    ^ self withoutTrailingForWhich:[:ch | ch isSeparator]
915
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  6812
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  6813
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6814
     '    foo    ' withoutTrailingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6815
     'foo    '     withoutTrailingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6816
     '    foo'     withoutTrailingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6817
     '       '     withoutTrailingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6818
     'foo'         withoutTrailingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6819
     ('  ' , Character tab asString , ' foo   ') withoutTrailingSeparators inspect
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6820
     ('   foo' , Character tab asString) withoutTrailingSeparators inspect
915
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  6821
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6822
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6823
18721
0cbaff816be6 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18671
diff changeset
  6824
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6825
!CharacterArray methodsFor:'substring searching'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6826
15055
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6827
findRangeOfString:subString
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6828
    "find a substring. if found, return the start- and endIndex;
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6829
     if not found, return an empty interval."
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6830
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6831
    ^ self rangeOfSubCollection:subString startingAt:1 ifAbsent:[0 to:-1] caseSensitive:true
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6832
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6833
    "
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6834
     'hello world' findRangeOfString:'llo'
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6835
     'hello world' findRangeOfString:'ole'
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6836
    "
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6837
!
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6838
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6839
findString:subString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6840
    "find a substring. if found, return the index;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6841
     if not found, return 0."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6842
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6843
    ^ self indexOfSubCollection:subString startingAt:1 ifAbsent:0 caseSensitive:true
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6844
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6845
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6846
     'hello world' findString:'llo'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6847
     'hello world' findString:'ole'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6848
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6849
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6850
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  6851
findString:subString caseSensitive:caseSensitive
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  6852
    "find a substring. if found, return the index;
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  6853
     if not found, return 0."
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  6854
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  6855
    ^ self indexOfSubCollection:subString startingAt:1 ifAbsent:0 caseSensitive:caseSensitive
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  6856
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  6857
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  6858
     'hello world' findString:'LLo' caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  6859
     'hello world' findString:'LLo' caseSensitive:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  6860
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  6861
!
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  6862
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6863
findString:subString ifAbsent:exceptionBlock
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6864
    "find a substring. If found, return the index;
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6865
     if not found, return the result of evaluating exceptionBlock."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6866
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6867
    ^ self indexOfSubCollection:subString startingAt:1 ifAbsent:exceptionBlock caseSensitive:true
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6868
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6869
11018
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  6870
findString:subString ignoreCase:ignoreCase
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  6871
    <resource: #obsolete>
11018
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  6872
    "find a substring. if found, return the index;
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  6873
     if not found, return 0."
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  6874
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  6875
    ^ self indexOfSubCollection:subString startingAt:1 ifAbsent:0 caseSensitive:ignoreCase not
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  6876
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  6877
    "
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  6878
     'hello world' findString:'LLo' ignoreCase:false
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  6879
     'hello world' findString:'LLo' ignoreCase:true
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  6880
    "
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  6881
!
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  6882
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6883
findString:subString startingAt:index
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6884
    "find a substring, starting at index. if found, return the index;
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6885
     if not found, return 0."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6886
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6887
    ^ self indexOfSubCollection:subString startingAt:index ifAbsent:0 caseSensitive:true
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6888
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6889
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6890
     'hello yello' findString:'llo' startingAt:1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6891
     'hello yello' findString:'llo' startingAt:5
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6892
     'hello yello' findString:'llo' startingAt:15
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6893
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6894
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6895
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6896
findString:subString startingAt:index ifAbsent:exceptionBlock
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6897
    "find a substring, starting at index. if found, return the index;
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6898
     if not found, return the result of evaluating exceptionBlock."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6899
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6900
    ^ self indexOfSubCollection:subString startingAt:index ifAbsent:exceptionBlock caseSensitive:true
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6901
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6902
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6903
findString:subString startingAt:index ifAbsent:exceptionBlock caseSensitive:caseSensitive
10929
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  6904
    "find a substring, starting at index. if found, return the index;
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  6905
     if not found, return the result of evaluating exceptionBlock."
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  6906
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  6907
    ^ self indexOfSubCollection:subString startingAt:index ifAbsent:exceptionBlock caseSensitive:caseSensitive
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  6908
!
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  6909
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6910
includesString:aString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6911
    "return true, if a substring is contained in the receiver"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6912
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6913
    ^ (self indexOfSubCollection:aString startingAt:1 ifAbsent:0 caseSensitive:true) ~~ 0
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6914
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6915
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6916
     'hello world' includesString:'hel'
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6917
     'hello world' includesString:'rld'
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6918
     'hello world' includesString:'llo'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6919
     'hello world' includesString:'LLO'
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6920
     'hello world' includesString:''
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6921
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6922
!
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  6923
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  6924
includesString:aString caseSensitive:caseSensitive
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6925
    "return true, if a substring is contained in the receiver"
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6926
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6927
    ^ (self indexOfSubCollection:aString startingAt:1 ifAbsent:0 caseSensitive:caseSensitive) ~~ 0
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6928
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6929
    "
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6930
     'hello world' includesString:'hel' caseSensitive:true
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6931
     'hello world' includesString:'HEL' caseSensitive:true
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6932
     'hello world' includesString:'HEL' caseSensitive:false
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6933
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6934
     'hello world' includesString:'wor' caseSensitive:true
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6935
     'hello world' includesString:'WOR' caseSensitive:true
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6936
     'hello world' includesString:'WOR' caseSensitive:false
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6937
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6938
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6939
17486
695203c93b71 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17485
diff changeset
  6940
indexOfString: aString
695203c93b71 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17485
diff changeset
  6941
    "VSE and V'age compatibility"
695203c93b71 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17485
diff changeset
  6942
    "find a substring. If found, return the index; if not found, return 0."
695203c93b71 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17485
diff changeset
  6943
695203c93b71 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17485
diff changeset
  6944
    ^ self indexOfSubCollection: aString startingAt: 1 ifAbsent:[0]
695203c93b71 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17485
diff changeset
  6945
!
695203c93b71 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17485
diff changeset
  6946
18721
0cbaff816be6 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18671
diff changeset
  6947
indexOfString:aString startingAt:startIndex 
0cbaff816be6 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18671
diff changeset
  6948
    "VSE and V'age compatibility"
0cbaff816be6 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18671
diff changeset
  6949
    "find a substring. If found, return the index; if not found, return 0."
0cbaff816be6 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18671
diff changeset
  6950
0cbaff816be6 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18671
diff changeset
  6951
    ^ self indexOfSubCollection:aString startingAt:startIndex ifAbsent:[0]
0cbaff816be6 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18671
diff changeset
  6952
!
0cbaff816be6 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18671
diff changeset
  6953
0cbaff816be6 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18671
diff changeset
  6954
indexOfString:aString startingAt:startIndex ifAbsent:exceptionalValue 
0cbaff816be6 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18671
diff changeset
  6955
    "VSE and V'age compatibility"
0cbaff816be6 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18671
diff changeset
  6956
    "find a substring. 
0cbaff816be6 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18671
diff changeset
  6957
     If found, return the index; if not found, the value from exceptionalValue."
0cbaff816be6 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18671
diff changeset
  6958
0cbaff816be6 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18671
diff changeset
  6959
    ^ self indexOfSubCollection:aString startingAt:startIndex ifAbsent:exceptionalValue
0cbaff816be6 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18671
diff changeset
  6960
!
0cbaff816be6 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18671
diff changeset
  6961
18671
1140587b5757 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18662
diff changeset
  6962
indexOfSubCollection:subString caseSensitive:caseSensitive
1140587b5757 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18662
diff changeset
  6963
    "find a substring, starting at index. if found, return the index;
1140587b5757 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18662
diff changeset
  6964
     if not found, return the result of evaluating exceptionBlock.
1140587b5757 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18662
diff changeset
  6965
     This is a q&d hack - not very efficient"
1140587b5757 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18662
diff changeset
  6966
1140587b5757 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18662
diff changeset
  6967
    ^ self indexOfSubCollection:subString startingAt:1 ifAbsent:[0] caseSensitive:caseSensitive.
1140587b5757 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18662
diff changeset
  6968
!
1140587b5757 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18662
diff changeset
  6969
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6970
indexOfSubCollection:subString startingAt:index ifAbsent:exceptionBlock
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6971
    "find a substring, starting at index. if found, return the index;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6972
     if not found, return the result of evaluating exceptionBlock.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6973
     This is a q&d hack - not very efficient"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6974
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6975
    ^ self indexOfSubCollection:subString startingAt:index ifAbsent:exceptionBlock caseSensitive:true.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6976
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6977
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6978
indexOfSubCollection:subString startingAt:index ifAbsent:exceptionBlock caseSensitive:caseSensitive
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6979
    "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
  6980
     if not found, return the result of evaluating exceptionBlock.
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6981
     This is a q&d hack - not very efficient"
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6982
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6983
    |firstChar found
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6984
     startIndex "{ Class: SmallInteger }"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6985
     subSize    "{ Class: SmallInteger }"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6986
     mySize     "{ Class: SmallInteger }"
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6987
     runIdx     "{ Class: SmallInteger }"
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6988
     tester|
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6989
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6990
    subSize := subString size.
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6991
    subSize == 0 ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6992
	subString isString ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6993
	   self error:'non string argument' mayProceed:true.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6994
	].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6995
	"empty string does not match"
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6996
	^ 0.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  6997
	"empty string matches"
15433
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6998
"/        ^ index
6122
a98958f1c85f handle non-string arg to indexOfSubString:
Claus Gittinger <cg@exept.de>
parents: 6119
diff changeset
  6999
    ].
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  7000
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  7001
    mySize := self size.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  7002
    firstChar := subString at:1.
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  7003
    caseSensitive ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7004
	tester := [:c1 :c2 | c1 = c2 ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7005
	startIndex := self indexOf:firstChar startingAt:index.
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  7006
    ] ifFalse:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7007
	tester := [:c1 :c2 | c1 sameAs: c2 ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7008
	startIndex := self findFirst:[:c | c sameAs:firstChar] startingAt:index.
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  7009
    ].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  7010
    [startIndex == 0] whileFalse:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7011
	runIdx := startIndex.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7012
	found := true.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7013
	1 to:subSize do:[:i |
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7014
	    runIdx > mySize ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7015
		found := false
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7016
	    ] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7017
		(tester value:(subString at:i) value:(self at:runIdx)) ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7018
		    found := false
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7019
		]
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7020
	    ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7021
	    runIdx := runIdx + 1
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7022
	].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7023
	found ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7024
	    ^ startIndex
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7025
	].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7026
	caseSensitive ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7027
	    startIndex := self indexOf:firstChar startingAt:(startIndex + 1)
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7028
	] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7029
	    startIndex := self findFirst:[:c | c sameAs:firstChar] startingAt:(startIndex + 1).
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7030
	].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  7031
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  7032
    ^ exceptionBlock value
1005
4507487e0be6 more on encoding/decoding (still unfinished)
Claus Gittinger <cg@exept.de>
parents: 997
diff changeset
  7033
4507487e0be6 more on encoding/decoding (still unfinished)
Claus Gittinger <cg@exept.de>
parents: 997
diff changeset
  7034
    "Modified: 23.2.1996 / 15:35:15 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7035
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7036
17191
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7037
indexOfSubCollection:subString startingAt:index ifAbsent:exceptionBlock caseSensitive:caseSensitive ignoreDiacritics:ignoreDiacritics
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7038
    "find a substring, starting at index. if found, return the index;
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7039
     if not found, return the result of evaluating exceptionBlock.
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7040
     This is a q&d hack - not very efficient
17191
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7041
     (see implementation in string, for a much faster algorithm)"
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7042
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7043
    |firstChar found
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7044
     startIndex "{ Class: SmallInteger }"
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7045
     subSize    "{ Class: SmallInteger }"
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7046
     mySize     "{ Class: SmallInteger }"
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7047
     runIdx     "{ Class: SmallInteger }"
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7048
     tester charMap firstCharMapped findNextIndex|
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7049
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7050
    subSize := subString size.
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7051
    subSize == 0 ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7052
	subString isString ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7053
	   self error:'non string argument' mayProceed:true.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7054
	].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7055
	"empty string does not match"
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7056
	^ 0.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7057
	"empty string matches"
17191
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7058
"/        ^ index
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7059
    ].
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7060
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7061
    mySize := self size.
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7062
    firstChar := subString at:1.
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7063
    ignoreDiacritics ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7064
	caseSensitive ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7065
	    charMap := [:ch | ch asLowercase withoutDiacritics].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7066
	] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7067
	    charMap := [:ch | ch withoutDiacritics].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7068
	].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7069
	tester := [:c1 :c2 | (charMap value:c1) = (charMap value:c2) ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7070
	firstCharMapped := (charMap value:firstChar).
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7071
	findNextIndex := [:index | self findFirst:[:ch | (charMap value:ch) = firstCharMapped] startingAt:index].
17191
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7072
    ] ifFalse:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7073
	caseSensitive ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7074
	    tester := [:c1 :c2 | c1 = c2 ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7075
	    findNextIndex := [:index | self indexOf:firstChar startingAt:index].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7076
	] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7077
	    tester := [:c1 :c2 | c1 sameAs: c2 ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7078
	    findNextIndex := [:index | self findFirst:[:c | c sameAs:firstChar] startingAt:index].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7079
	].
17191
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7080
    ].
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7081
    startIndex := findNextIndex value:index.
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7082
    [startIndex == 0] whileFalse:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7083
	runIdx := startIndex.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7084
	found := true.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7085
	1 to:subSize do:[:i |
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7086
	    runIdx > mySize ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7087
		found := false
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7088
	    ] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7089
		(tester value:(subString at:i) value:(self at:runIdx)) ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7090
		    found := false
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7091
		]
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7092
	    ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7093
	    runIdx := runIdx + 1
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7094
	].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7095
	found ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7096
	    ^ startIndex
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7097
	].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7098
	startIndex := findNextIndex value:(startIndex + 1)
17191
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7099
    ].
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7100
    ^ exceptionBlock value
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7101
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7102
    "
17600
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  7103
     'bla depot bla dépots' indexOfSubCollection:'dep' startingAt:1 ifAbsent:0 caseSensitive:false ignoreDiacritics:true. 5
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  7104
     'bla depot bla dépots' indexOfSubCollection:'dep' startingAt:6 ifAbsent:0 caseSensitive:false ignoreDiacritics:true. 0
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  7105
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  7106
     'bla depot bla dépots' indexOfSubCollection:'dep' startingAt:1 ifAbsent:0 caseSensitive:false ignoreDiacritics:false. 5
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  7107
     'bla depot bla dépots' indexOfSubCollection:'dep' startingAt:6 ifAbsent:0 caseSensitive:false ignoreDiacritics:false. 0
17191
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7108
    "
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7109
!
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7110
15055
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  7111
rangeOfSubCollection:subString startingAt:start ifAbsent:exceptionValue caseSensitive:caseSensitive
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  7112
    "find a substring. if found, return the start- and endIndex;
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  7113
     if not found, return the value of exceptionValue."
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  7114
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  7115
    |i|
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  7116
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  7117
    i := self indexOfSubCollection:subString startingAt:start ifAbsent:0 caseSensitive:caseSensitive.
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  7118
    i == 0 ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7119
	^ exceptionValue value
15055
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  7120
    ].
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  7121
    ^ i to:(i + subString size - 1)
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  7122
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  7123
    "
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  7124
     'hello world' findRangeOfString:'llo'
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  7125
     'hello world' findRangeOfString:'ole'
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  7126
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7127
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7128
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7129
!CharacterArray methodsFor:'testing'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7130
18463
8c5f3917b2e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18425
diff changeset
  7131
argumentCount
8c5f3917b2e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18425
diff changeset
  7132
    "treating the receiver as a message selector, return how many arguments would it take (ANSI)"
8c5f3917b2e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18425
diff changeset
  7133
8c5f3917b2e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18425
diff changeset
  7134
    |binopChars|
8c5f3917b2e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18425
diff changeset
  7135
8c5f3917b2e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18425
diff changeset
  7136
    (self size <= Method maxBinarySelectorSize) ifTrue:[
8c5f3917b2e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18425
diff changeset
  7137
        binopChars := Method binarySelectorCharacters.
8c5f3917b2e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18425
diff changeset
  7138
        (self conform:[:eachChar | (binopChars includes:eachChar)]) ifTrue:[
8c5f3917b2e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18425
diff changeset
  7139
            ^ 1
8c5f3917b2e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18425
diff changeset
  7140
        ].
8c5f3917b2e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18425
diff changeset
  7141
    ].
8c5f3917b2e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18425
diff changeset
  7142
    ^ self occurrencesOf:$:
8c5f3917b2e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18425
diff changeset
  7143
8c5f3917b2e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18425
diff changeset
  7144
    "
8c5f3917b2e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18425
diff changeset
  7145
     'foo:bar:' argumentCount
8c5f3917b2e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18425
diff changeset
  7146
     #foo:bar: argumentCount
8c5f3917b2e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18425
diff changeset
  7147
     'hello' argumentCount
8c5f3917b2e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18425
diff changeset
  7148
     '+' argumentCount
8c5f3917b2e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18425
diff changeset
  7149
     '++' argumentCount
8c5f3917b2e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18425
diff changeset
  7150
     '+++' argumentCount
8c5f3917b2e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18425
diff changeset
  7151
     '|' argumentCount
8c5f3917b2e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18425
diff changeset
  7152
     '?' argumentCount
8c5f3917b2e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18425
diff changeset
  7153
     '_' argumentCount
8c5f3917b2e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18425
diff changeset
  7154
     '_:' argumentCount
8c5f3917b2e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18425
diff changeset
  7155
     '_:_:' argumentCount
8c5f3917b2e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18425
diff changeset
  7156
     '<->' argumentCount
8c5f3917b2e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18425
diff changeset
  7157
    "
8c5f3917b2e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18425
diff changeset
  7158
!
8c5f3917b2e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18425
diff changeset
  7159
18597
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7160
characterSize
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7161
    "answer the size in bits of my largest character (actually only 7, 8, 16 or 32)"
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7162
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7163
    |string max    
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7164
     sz "{ Class:SmallInteger}" |
15829
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  7165
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  7166
    (string := self string) ~~ self ifTrue:[
18597
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7167
        ^ string characterSize.
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7168
    ].
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7169
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7170
    sz := self size.
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7171
    max := 7.
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7172
    1 to:sz do:[:idx |
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7173
        |thisSize|
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7174
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7175
        thisSize := (self at:idx) characterSize.
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7176
        thisSize > max ifTrue:[
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7177
            max := thisSize.
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7178
            max == 32 ifTrue:[
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7179
                "shortcut: we know, that max size is 32"
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7180
                ^ 32.
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7181
            ].
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7182
        ].
15829
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  7183
    ].
18597
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7184
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7185
    ^ max.
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7186
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7187
    "
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7188
     'hello' characterSize
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7189
     'hello' asUnicode32String characterSize
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7190
     'helloü' asUnicode32String characterSize
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7191
     'hello' asText allBold characterSize
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7192
    "
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7193
!
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7194
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7195
contains8BitCharacters
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7196
    <resource: #obsolete>
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7197
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7198
    ^ self containsNon7BitAscii
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7199
!
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7200
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7201
containsNon7BitAscii
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7202
    "return true, if the underlying string contains 8BitCharacters (or widers)
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7203
     (i.e. if it is non-ascii)"
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7204
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7205
    |string
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7206
     sz "{ Class:SmallInteger }"|
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7207
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7208
    (string := self string) ~~ self ifTrue:[
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7209
        ^ string containsNon7BitAscii
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7210
    ].
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7211
    sz := self size.
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7212
    1 to:sz do:[:idx|
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7213
        (self at:idx) codePoint > 16r7F ifTrue:[
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7214
            ^ true.
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7215
        ].
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7216
    ].
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7217
    ^ false.
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7218
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7219
    "
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7220
     'hello' asUnicode32String containsNon7BitAscii
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7221
     'hello üöä' asUnicode32String containsNon7BitAscii
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7222
     'hello' asUnicode32String asText allBold containsNon7BitAscii
5349c840a5a4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18589
diff changeset
  7223
     'hello üö' asUnicode32String asText allBold containsNon7BitAscii
15829
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  7224
    "
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  7225
!
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  7226
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7227
isAlphaNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7228
    "return true, if the receiver is some alphanumeric word;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7229
     i.e. consists of a letter followed by letters or digits."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7230
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7231
    self size == 0 ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7232
	"mhmh what is this ?"
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7233
	^ false
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7234
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7235
    (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
  7236
    ^ self conform:[:char | char isLetterOrDigit].
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  7237
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  7238
    "
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7239
     'helloWorld' isAlphaNumeric
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7240
     'foo1234' isAlphaNumeric
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7241
     'f1234' isAlphaNumeric
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7242
     '1234' isAlphaNumeric
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7243
     '+' isAlphaNumeric
10093
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  7244
    "
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  7245
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  7246
    "Modified: / 13-10-2006 / 12:53:49 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7247
!
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  7248
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  7249
isBinarySelector
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7250
    "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
  7251
     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
  7252
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  7253
    |binopChars|
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  7254
18463
8c5f3917b2e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18425
diff changeset
  7255
    (self size > Method maxBinarySelectorSize) ifTrue:[^ false].
8c5f3917b2e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18425
diff changeset
  7256
8c5f3917b2e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18425
diff changeset
  7257
    binopChars := Method binarySelectorCharacters.
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  7258
    ^ (self conform:[:char | (binopChars includes:char)])
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  7259
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  7260
    "
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  7261
     'foo:bar:' isBinarySelector
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  7262
     #foo:bar: isBinarySelector
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  7263
     'hello' isBinarySelector
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  7264
     '+' isBinarySelector
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  7265
     '|' isBinarySelector
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  7266
     '?' isBinarySelector
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  7267
     ':' isBinarySelector
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  7268
     'a:' isBinarySelector
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  7269
     '->' isBinarySelector
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  7270
     '<->' isBinarySelector
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  7271
     '::' isBinarySelector
7482
e73c296fa7dc + isBinarySelector
Claus Gittinger <cg@exept.de>
parents: 7423
diff changeset
  7272
    "
e73c296fa7dc + isBinarySelector
Claus Gittinger <cg@exept.de>
parents: 7423
diff changeset
  7273
e73c296fa7dc + isBinarySelector
Claus Gittinger <cg@exept.de>
parents: 7423
diff changeset
  7274
    "Modified: 4.1.1997 / 14:16:14 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7275
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7276
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7277
isBlank
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7278
    "return true, if the receiver contains spaces only"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7279
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7280
    ^ (self contains:[:char | char ~~ Character space]) not
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7281
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7282
    "
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7283
     '' isBlank
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7284
     '   a    ' isBlank
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7285
     '        ' isBlank
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7286
     '        ' asUnicode16String isBlank
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7287
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7288
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7289
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7290
isKeywordSelector
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7291
    "return true, iff there are only alphanumeric or underline characters separated by colons.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7292
     Must end with a colon."
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7293
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7294
    |state|
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7295
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  7296
    state := #initial.
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7297
    self do:[:char |
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7298
	(state == #initial or:[ state == #gotColon]) ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7299
	    (char isLetterOrUnderline) ifFalse:[^ false].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7300
	    state := #gotCharacter.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7301
	] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7302
	    char == $: ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7303
		state := #gotColon.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7304
	    ] ifFalse:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7305
		(char isLetterOrDigit or:[char == $_]) ifFalse:[^ false].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7306
	    ].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7307
	].
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7308
    ].
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7309
    ^ state == #gotColon.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7310
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7311
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  7312
     self assert:(':' isKeywordSelector not).
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7313
     self assert:(':a' isKeywordSelector not).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7314
     self assert:('1:' isKeywordSelector not).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7315
     self assert:('a:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7316
     self assert:('_:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7317
     self assert:('_a:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7318
     self assert:('_1:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7319
     self assert:('_1::' isKeywordSelector not).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7320
     self assert:('_:_:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7321
     self assert:('a:b:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7322
     self assert:('aa:bb:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7323
     self assert:('aa:bb:a' isKeywordSelector not).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7324
     self assert:('1:2:' isKeywordSelector not).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7325
    "
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7326
!
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7327
10431
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7328
isNameSpaceSelector
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7329
    "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
  7330
     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
  7331
     For example, the #+ selector as seen by the Foo namespace would be actually #':Foo::+'.
17511
da227974be48 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17509
diff changeset
  7332
     This special format (a symbol starting with a colon) was chosen, because almost every other selector
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7333
     is legal, and this can be checked quickly by just looking at the first character.
10431
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7334
     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
  7335
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7336
    |i|
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7337
16733
3f4622673efc comment/format only
Claus Gittinger <cg@exept.de>
parents: 16697
diff changeset
  7338
    (self at:1) == $: ifFalse:[^ false].
17511
da227974be48 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17509
diff changeset
  7339
10431
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7340
    i := self indexOf:$: startingAt:2.
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7341
    i == 0 ifTrue:[^ false].
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7342
    self size <= (i+1) ifTrue:[^ false].
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7343
    (self at:i+1) == $: ifFalse:[^ false].
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7344
    (self at:i+2) == $: ifTrue:[^ false].
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7345
    "/ 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
  7346
    ^ true
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7347
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7348
    "test:
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7349
     self assert:('+' isNameSpaceSelector) not.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7350
     self assert:(':+' isNameSpaceSelector) not.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7351
     self assert:(':Foo:+' isNameSpaceSelector) not.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7352
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7353
     self assert:(':Foo::+' isNameSpaceSelector).
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7354
     self assert:(':Foo::bar:baz:' isNameSpaceSelector).
10431
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7355
    "
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7356
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7357
    "Created: / 05-03-2007 / 11:35:31 / cg"
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7358
!
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7359
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7360
isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7361
    "return true, if the receiver is some numeric word;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7362
     i.e. consists only of digits."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7363
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7364
    self size == 0 ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7365
	^ false
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7366
    ].
10093
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  7367
    ^ self conform:[:char | char isDigit]
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7368
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7369
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7370
     'helloWorld' isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7371
     'foo1234' isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7372
     'f1234' isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7373
     '1234' isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7374
     '+' isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7375
    "
10093
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  7376
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  7377
    "Modified: / 13-10-2006 / 12:54:12 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7378
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7379
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7380
isString
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7381
    "return true, if the receiver is some kind of string;
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7382
     true is returned here - redefinition of Object>>isString."
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7383
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7384
    ^ true
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7385
!
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7386
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7387
isUnarySelector
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7388
    "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
  7389
17442
eccdc56fffa4 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17371
diff changeset
  7390
    ^ (self first isLetterOrUnderline)
9845
361f4b5d7b19 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9522
diff changeset
  7391
      and:[ self conform: [ :chr | chr isLetterOrDigit or:[chr == $_] ]]
361f4b5d7b19 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9522
diff changeset
  7392
361f4b5d7b19 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9522
diff changeset
  7393
    "Modified: / 13-09-2006 / 11:35:15 / cg"
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7394
!
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7395
14122
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  7396
isUnicode16String
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  7397
    ^ false
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  7398
!
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  7399
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  7400
isUnicode32String
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  7401
    ^ false
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  7402
!
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  7403
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  7404
isUnicodeString
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  7405
    ^ false
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  7406
!
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  7407
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7408
isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7409
    "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
  7410
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7411
    |scanner tok|
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7412
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7413
    scanner := Compiler new.
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7414
    scanner source:(self readStream).
11630
6db5956f188f isValidSmalltalkIdentifier: return true/false (catch parseError)
Claus Gittinger <cg@exept.de>
parents: 11565
diff changeset
  7415
    Parser parseErrorSignal handle:[:ex |
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7416
	tok := nil.
11630
6db5956f188f isValidSmalltalkIdentifier: return true/false (catch parseError)
Claus Gittinger <cg@exept.de>
parents: 11565
diff changeset
  7417
    ] do:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7418
	tok := scanner nextToken.
11630
6db5956f188f isValidSmalltalkIdentifier: return true/false (catch parseError)
Claus Gittinger <cg@exept.de>
parents: 11565
diff changeset
  7419
    ].
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7420
    tok ~~ #Identifier ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7421
	^ false
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7422
    ].
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7423
    scanner tokenPosition == 1 ifFalse:[^ false].
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7424
    ^ scanner sourceStream atEnd.
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7425
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7426
    "
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7427
     'foo' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7428
     '1foo' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7429
     '_foo' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7430
     '_foo_bar_' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7431
     'foo ' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7432
     ' foo' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7433
    "
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7434
!
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7435
14555
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  7436
isWideString
15829
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  7437
    |string|
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  7438
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  7439
    (string := self string) ~~ self ifTrue:[
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7440
	^ string isWideString.
15829
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  7441
    ].
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  7442
    ^ self contains:[:aCharacter | aCharacter codePoint > 16rFF].
14555
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  7443
!
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  7444
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7445
numArgs
18463
8c5f3917b2e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18425
diff changeset
  7446
    <resource: #obsolete>
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  7447
    "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
  7448
18463
8c5f3917b2e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18425
diff changeset
  7449
    ^ self argumentCount
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7450
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7451
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7452
partsIfSelector
14629
6491c3b25cd5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14609
diff changeset
  7453
    "treat the receiver as a message selector, return a collection of parts.
6491c3b25cd5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14609
diff changeset
  7454
     Notice: this is more tolerant than Smalltalk's syntax would suggest;
6491c3b25cd5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14609
diff changeset
  7455
     especially it allows for empty keyword parts between colons.
6491c3b25cd5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14609
diff changeset
  7456
     This is not (and should not be checked here), to allow parsing of
6491c3b25cd5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14609
diff changeset
  7457
     degenerate selectors as appearing with objectiveC."
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  7458
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7459
    |idx1 "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7460
     coll idx2 sz|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7461
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7462
    coll := OrderedCollection new.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7463
    idx1 := 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7464
    sz := self size.
16245
d16f9c7d9428 [true] whileTrue: -> #loop
Stefan Vogel <sv@exept.de>
parents: 16212
diff changeset
  7465
    [
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7466
	idx2 := self indexOf:$: startingAt:idx1.
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7467
	(idx2 == 0 or:[idx2 == sz]) ifTrue:[
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7468
	    coll add:(self copyFrom:idx1).
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7469
	    ^ coll
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7470
	].
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7471
	coll add:(self copyFrom:idx1 to:idx2).
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7472
	idx1 := idx2 + 1
16245
d16f9c7d9428 [true] whileTrue: -> #loop
Stefan Vogel <sv@exept.de>
parents: 16212
diff changeset
  7473
    ] loop.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7474
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7475
    "
18350
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7476
     'foo:' partsIfSelector
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7477
     'foo:bar:' partsIfSelector
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7478
     'foo::::' partsIfSelector
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7479
     #foo:bar: partsIfSelector
8f0102bb84f5 a send avoided in endsWith:
Claus Gittinger <cg@exept.de>
parents: 18318
diff changeset
  7480
     'hello' partsIfSelector
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7481
     '+' partsIfSelector
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7482
    "
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  7483
! !
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  7484
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7485
!CharacterArray methodsFor:'tracing'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7486
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7487
traceInto:aRequestor level:level from:referrer
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7488
    "double dispatch into tracer, passing my type implicitely in the selector"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7489
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7490
    ^ aRequestor traceCharacterArray:self level:level from:referrer
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7491
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7492
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7493
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7494
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7495
!CharacterArray methodsFor:'visiting'!
8395
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  7496
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  7497
acceptVisitor:aVisitor with:aParameter
16733
3f4622673efc comment/format only
Claus Gittinger <cg@exept.de>
parents: 16697
diff changeset
  7498
    "dispatch for visitor pattern; send #visitString:with: to aVisitor"
8395
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  7499
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  7500
    ^ aVisitor visitString:self with:aParameter
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  7501
! !
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  7502
18721
0cbaff816be6 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18671
diff changeset
  7503
1849
9f35f5934ec6 added msdos-latin1 en/decoder (code = #msdos850)
Claus Gittinger <cg@exept.de>
parents: 1669
diff changeset
  7504
!CharacterArray class methodsFor:'documentation'!
629
2ceefe9b5a19 version at the end
Claus Gittinger <cg@exept.de>
parents: 608
diff changeset
  7505
2ceefe9b5a19 version at the end
Claus Gittinger <cg@exept.de>
parents: 608
diff changeset
  7506
version
18476
5a7a334213f7 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18464
diff changeset
  7507
    ^ '$Header$'
12058
80a7dee97d3c comments
Claus Gittinger <cg@exept.de>
parents: 11955
diff changeset
  7508
!
80a7dee97d3c comments
Claus Gittinger <cg@exept.de>
parents: 11955
diff changeset
  7509
80a7dee97d3c comments
Claus Gittinger <cg@exept.de>
parents: 11955
diff changeset
  7510
version_CVS
18476
5a7a334213f7 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18464
diff changeset
  7511
    ^ '$Header$'
18258
9f83d8bddcf0 Fix in CharacterArray>>withTabsExpanded: - case for Unicode16/Unicode32 strings
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 18200
diff changeset
  7512
!
9f83d8bddcf0 Fix in CharacterArray>>withTabsExpanded: - case for Unicode16/Unicode32 strings
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 18200
diff changeset
  7513
9f83d8bddcf0 Fix in CharacterArray>>withTabsExpanded: - case for Unicode16/Unicode32 strings
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 18200
diff changeset
  7514
version_HG
9f83d8bddcf0 Fix in CharacterArray>>withTabsExpanded: - case for Unicode16/Unicode32 strings
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 18200
diff changeset
  7515
9f83d8bddcf0 Fix in CharacterArray>>withTabsExpanded: - case for Unicode16/Unicode32 strings
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 18200
diff changeset
  7516
    ^ '$Changeset: <not expanded> $'
629
2ceefe9b5a19 version at the end
Claus Gittinger <cg@exept.de>
parents: 608
diff changeset
  7517
! !
6809
72fee17c14b1 utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6743
diff changeset
  7518
14606
1aaaa6d79e54 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14592
diff changeset
  7519
2728
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
  7520
CharacterArray initialize!