CharacterArray.st
author Stefan Vogel <sv@exept.de>
Wed, 22 Apr 2015 19:45:10 +0200
changeset 18269 77a84c6693c8
parent 18194 bec89cec5d13
child 18274 042d13555f1f
child 18318 c9687a5e7ee7
permissions -rw-r--r--
class: CharacterArray changed:5 methods Use CharacterWriteStream for Unicode compatibility
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
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
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
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
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.
68
59faa75185ba *** empty log message ***
claus
parents: 64
diff changeset
    45
    (singleByte-)Strings, TwoByteStrings and whatever comes in the future.
154
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
    46
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
    47
    This class is abstract, meaning that there are no instances of it.
2537
9398b135cec4 comment
Claus Gittinger <cg@exept.de>
parents: 2520
diff changeset
    48
    All this class does is provide common protocol for concrete subclasses.
1290
15ba3221b89b documentation
Claus Gittinger <cg@exept.de>
parents: 1272
diff changeset
    49
15ba3221b89b documentation
Claus Gittinger <cg@exept.de>
parents: 1272
diff changeset
    50
    [author:]
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
    51
        Claus Gittinger
1290
15ba3221b89b documentation
Claus Gittinger <cg@exept.de>
parents: 1272
diff changeset
    52
15ba3221b89b documentation
Claus Gittinger <cg@exept.de>
parents: 1272
diff changeset
    53
    [see also:]
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
    54
        String TwoByteString
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
    55
        StringCollection
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    56
"
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    57
! !
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    58
2728
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    59
!CharacterArray class methodsFor:'initialization'!
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    60
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    61
initialize
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
    62
    DecodingFailedSignal isNil ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
    63
        DecodingFailedSignal := DecodingError.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
    64
        DecodingFailedSignal notifierString:'error during decode'.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
    65
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
    66
        EncodingFailedSignal :=EncodingError.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
    67
        EncodingFailedSignal notifierString:'error during encode'.
5440
ba9207f592c9 only init once
Claus Gittinger <cg@exept.de>
parents: 5352
diff changeset
    68
    ]
2728
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    69
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    70
    "
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    71
     CharacterArray initialize
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    72
    "
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    73
2833
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
    74
    "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
    75
! !
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    76
1849
9f35f5934ec6 added msdos-latin1 en/decoder (code = #msdos850)
Claus Gittinger <cg@exept.de>
parents: 1669
diff changeset
    77
!CharacterArray class methodsFor:'instance creation'!
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    78
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    79
basicNew
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    80
    "return a new empty string"
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    81
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    82
    ^ self basicNew:0
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    83
!
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    84
2734
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    85
fromBytes:aByteCollection
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    86
    "return an instance of the receiver class,
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    87
     taking untranslated bytes from the argument, aByteCollection.
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    88
     Only useful, when reading twoByteStrings from external sources."
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    89
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    90
    |mySize nBytes newString dstIdx|
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    91
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    92
    nBytes := aByteCollection size.
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    93
    mySize := self basicNew bitsPerCharacter.
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    94
    mySize == 16 ifTrue:[
17625
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
    95
        newString := self uninitializedNew:(nBytes // 2).
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
    96
        dstIdx := 1.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
    97
        aByteCollection pairWiseDo:[:hi :lo |
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
    98
            newString at:dstIdx put:(Character value:(hi bitShift:8)+lo).
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
    99
            dstIdx := dstIdx + 1
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   100
        ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   101
        ^ newString.
2734
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   102
    ].
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   103
17625
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
   104
    ^ (self uninitializedNew:nBytes) replaceFrom:1 with:aByteCollection
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
   105
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
   106
    "
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
   107
     Unicode16String fromBytes:#[16r02 16r20]                     
2734
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   108
    "
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   109
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   110
    "Modified: 30.6.1997 / 20:08:37 / cg"
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   111
!
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   112
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
   113
fromString:aString
af7aeb79b25e Initial revision
claus
parents:
diff changeset
   114
    "return a copy of the argument, aString"
af7aeb79b25e Initial revision
claus
parents:
diff changeset
   115
17625
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
   116
    ^ (self uninitializedNew:aString size) replaceFrom:1 with:aString
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
   117
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
   118
    "
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
   119
        Unicode16String fromString:'hello'
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
   120
    "
581
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   121
!
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   122
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   123
fromStringCollection:aCollectionOfStrings
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   124
    "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
   125
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   126
    ^ self fromStringCollection:aCollectionOfStrings separatedBy:''
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   127
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   128
    "
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   129
     String fromStringCollection:#('hello' 'world' 'how' 'about' 'this')
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   130
    "
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   131
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   132
    "Created: 20.11.1995 / 15:26:59 / cg"
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   133
!
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   134
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   135
fromStringCollection:aCollectionOfStrings separatedBy:aSeparatorString
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   136
    "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
   137
17625
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
   138
    |stream|
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
   139
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
   140
    aCollectionOfStrings do:[:eachString |
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
   141
        stream isNil ifTrue:[
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
   142
            stream := self writeStreamClass with:eachString.
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
   143
        ] ifFalse:[
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
   144
            stream
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
   145
                nextPutAll:aSeparatorString;
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
   146
                nextPutAll:eachString.
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   147
        ].
581
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   148
    ].
17700
32c288b4487f class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17644
diff changeset
   149
    stream isNil ifTrue:[^ ''].
17625
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
   150
    ^ stream contents
581
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
    "
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   153
     String fromStringCollection:#('hello' 'world' 'how' 'about' 'this') separatedBy:' '
17625
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
   154
     String fromStringCollection:#('hello' 'world' 'how' 'about' 'this') separatedBy:'È '
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
   155
     Text fromStringCollection:{'hello'. 'world'. 'how' allBold. 'about'. 'this'. 'äöü'} separatedBy:'Ƞ'
581
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
    "Created: 20.11.1995 / 15:32:17 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   159
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   160
5757
2511dcddce73 utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5741
diff changeset
   161
fromUTF8Bytes:aByteCollection
5758
30e0cc2213ac utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5757
diff changeset
   162
    "return a new string which represents the characters as decoded
30e0cc2213ac utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5757
diff changeset
   163
     from the utf8 encoded bytes, aByteCollection.
30e0cc2213ac utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5757
diff changeset
   164
     Returns either a normal String, or a TwoByteString instance.
6810
a055eb19e9d3 caych invalid encodings
Claus Gittinger <cg@exept.de>
parents: 6809
diff changeset
   165
     Only useful, when reading twoByteStrings from external sources.
a055eb19e9d3 caych invalid encodings
Claus Gittinger <cg@exept.de>
parents: 6809
diff changeset
   166
     This only handles up-to 16bit characters"
5757
2511dcddce73 utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5741
diff changeset
   167
7876
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   168
    ^ self decodeFromUTF8:aByteCollection.
5757
2511dcddce73 utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5741
diff changeset
   169
2511dcddce73 utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5741
diff changeset
   170
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   171
     CharacterArray fromUTF8Bytes:#[ 16r41 16r42 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   172
     CharacterArray fromUTF8Bytes:#[ 16rC1 16r02 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   173
     CharacterArray fromUTF8Bytes:#[ 16rE0 16r81 16r02 ]
6810
a055eb19e9d3 caych invalid encodings
Claus Gittinger <cg@exept.de>
parents: 6809
diff changeset
   174
     CharacterArray fromUTF8Bytes:#[ 16rEF 16rBF 16rBF ]
a055eb19e9d3 caych invalid encodings
Claus Gittinger <cg@exept.de>
parents: 6809
diff changeset
   175
a055eb19e9d3 caych invalid encodings
Claus Gittinger <cg@exept.de>
parents: 6809
diff changeset
   176
   rfc2279 examples:
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   177
     CharacterArray fromUTF8Bytes:#[ 16r41 16rE2 16r89 16rA2 16rCE 16r91 16r2E ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   178
     CharacterArray fromUTF8Bytes:#[ 16rED 16r95 16r9C 16rEA 16rB5 16rAD 16rEC 16r96 16rB4 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   179
     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
   180
a055eb19e9d3 caych invalid encodings
Claus Gittinger <cg@exept.de>
parents: 6809
diff changeset
   181
   invalid:
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   182
     CharacterArray fromUTF8Bytes:#[ 16rC0 16r80 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   183
     CharacterArray fromUTF8Bytes:#[ 16rE0 16r80 16r80 ]
5757
2511dcddce73 utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5741
diff changeset
   184
    "
2511dcddce73 utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5741
diff changeset
   185
!
2511dcddce73 utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5741
diff changeset
   186
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   187
new
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   188
    "return a new empty string"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   189
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   190
    ^ self basicNew:0
9425
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   191
!
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   192
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   193
readSmalltalkStringFrom:aStreamOrString onError:exceptionBlock
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   194
    "read & return the next String from the (character-)stream aStream;
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   195
     skipping all whitespace first; return the value of exceptionBlock,
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   196
     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
   197
     stream must be one as stored via storeOn: or storeString."
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   198
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   199
    |str collected char|
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   200
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   201
    str := aStreamOrString readStream.
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   202
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   203
    "skip whiteSpace"
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   204
    str skipSeparators.
11320
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
   205
14452
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   206
    (str peekOrNil == $') ifTrue:[
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   207
        str next.
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   208
        collected := self writeStream.
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   209
        [str atEnd] whileFalse:[
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   210
            char := str next.
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   211
            char == $' ifTrue:[
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   212
                "/ look for another quote
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   213
                str peekOrNil ~~ $' ifTrue:[
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   214
                    "end of string reached"
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   215
                    ^ collected contents.
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   216
                ].
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   217
                "eat doubled quote"
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   218
                str next.
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   219
            ].
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   220
            ((char ~~ Character return) or:[str peekOrNil ~~ Character lf]) ifTrue:[
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   221
                "compress CRLF to LF, but keep a single CR"
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   222
                collected nextPut:char.
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   223
            ].
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   224
        ].
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   225
        "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
   226
    ].
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   227
    ^ exceptionBlock value
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   228
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   229
    "
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   230
     String readFrom:('''hello world''' readStream)
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   231
     String readFrom:('''hello '''' world''' readStream)
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   232
     String readFrom:('1 ''hello'' ' readStream)
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   233
     String readFrom:('1 ''hello'' ' readStream) onError:['foobar']
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   234
    "
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   235
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   236
    "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
   237
    "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
   238
!
4bf099f5bb56 CharacterArray class>>#writeStream - answer a CharacterWriteStrem
Stefan Vogel <sv@exept.de>
parents: 11229
diff changeset
   239
13201
848ccc41fc90 added: #writeStreamClass
Claus Gittinger <cg@exept.de>
parents: 13170
diff changeset
   240
writeStreamClass
17213
1031d5018042 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17205
diff changeset
   241
    "the class used by writeStream.
1031d5018042 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17205
diff changeset
   242
     Here, we return CharacterWriteStream, which automatically changes
1031d5018042 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17205
diff changeset
   243
     the underlying collection to a multiByte string (i.e. UnicodeString).
1031d5018042 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17205
diff changeset
   244
     So you can stream wide characters into it."
13201
848ccc41fc90 added: #writeStreamClass
Claus Gittinger <cg@exept.de>
parents: 13170
diff changeset
   245
848ccc41fc90 added: #writeStreamClass
Claus Gittinger <cg@exept.de>
parents: 13170
diff changeset
   246
    ^ CharacterWriteStream
11243
4bf099f5bb56 CharacterArray class>>#writeStream - answer a CharacterWriteStrem
Stefan Vogel <sv@exept.de>
parents: 11229
diff changeset
   247
4bf099f5bb56 CharacterArray class>>#writeStream - answer a CharacterWriteStrem
Stefan Vogel <sv@exept.de>
parents: 11229
diff changeset
   248
    "
4bf099f5bb56 CharacterArray class>>#writeStream - answer a CharacterWriteStrem
Stefan Vogel <sv@exept.de>
parents: 11229
diff changeset
   249
     String writeStream
4bf099f5bb56 CharacterArray class>>#writeStream - answer a CharacterWriteStrem
Stefan Vogel <sv@exept.de>
parents: 11229
diff changeset
   250
    "
13201
848ccc41fc90 added: #writeStreamClass
Claus Gittinger <cg@exept.de>
parents: 13170
diff changeset
   251
848ccc41fc90 added: #writeStreamClass
Claus Gittinger <cg@exept.de>
parents: 13170
diff changeset
   252
    "Created: / 09-01-2011 / 10:37:57 / cg"
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
   253
! !
af7aeb79b25e Initial revision
claus
parents:
diff changeset
   254
9265
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   255
!CharacterArray class methodsFor:'Compatibility-VW'!
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   256
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   257
fromIntegerArray: anArray
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   258
    "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
   259
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   260
    | new |
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   261
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   262
    new := self new: anArray size.
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   263
    1 to: anArray size do:[:index |
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   264
        new at: index put: (anArray at: index) asCharacter
9265
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   265
    ].
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   266
    ^new
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   267
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   268
    "
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   269
     String fromIntegerArray: #[8 127]
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   270
    "
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   271
! !
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   272
2728
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   273
!CharacterArray class methodsFor:'Signal constants'!
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   274
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   275
decodingFailedSignal
2833
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   276
    "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
   277
     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
   278
     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
   279
     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
   280
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   281
    ^ DecodingFailedSignal
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   282
2833
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   283
    "Created: 28.6.1997 / 20:09:55 / cg"
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   284
    "Modified: 3.8.1997 / 18:16:47 / cg"
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   285
!
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   286
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   287
encodingFailedSignal
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   288
    "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
   289
     due to invalid characters contained in the source."
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   290
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   291
    ^ EncodingFailedSignal
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   292
2728
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   293
    "Modified: 28.6.1997 / 20:09:35 / cg"
2833
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   294
    "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
   295
! !
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   296
18269
77a84c6693c8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18194
diff changeset
   297
1849
9f35f5934ec6 added msdos-latin1 en/decoder (code = #msdos850)
Claus Gittinger <cg@exept.de>
parents: 1669
diff changeset
   298
!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
   299
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   300
lowSpaceCleanup
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   301
    "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
   302
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   303
    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
   304
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   305
    "
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   306
     CharacterArray lowSpaceCleanup
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   307
    "
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   308
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   309
    "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
   310
    "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
   311
! !
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   312
7421
4e6c6edb90d9 category rename
Claus Gittinger <cg@exept.de>
parents: 7349
diff changeset
   313
!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
   314
7876
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   315
decodeFromUTF8:aStringOrByteCollection
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   316
    "return a string which represents the characters as decoded
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   317
     from the utf8 encoded bytes, aByteCollection.
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   318
     Returns either a normal String, or a TwoByteString instance.
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   319
     Only useful, when reading twoByteStrings from external sources.
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   320
     This only handles up-to 16bit characters."
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   321
8124
ca774158b317 code cleanup (removed old obsolete encoding stuff)
Claus Gittinger <cg@exept.de>
parents: 8102
diff changeset
   322
    ^ CharacterEncoderImplementations::ISO10646_to_UTF8 decodeString:aStringOrByteCollection
7876
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   323
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   324
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   325
     CharacterArray fromUTF8Bytes:#[ 16r41 16r42 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   326
     CharacterArray fromUTF8Bytes:#[ 16rC1 16r02 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   327
     CharacterArray fromUTF8Bytes:#[ 16rE0 16r81 16r02 ]
7876
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   328
     CharacterArray fromUTF8Bytes:#[ 16rEF 16rBF 16rBF ]
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   329
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   330
   rfc2279 examples:
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   331
     CharacterArray fromUTF8Bytes:#[ 16r41 16rE2 16r89 16rA2 16rCE 16r91 16r2E ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   332
     CharacterArray fromUTF8Bytes:#[ 16rED 16r95 16r9C 16rEA 16rB5 16rAD 16rEC 16r96 16rB4 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   333
     CharacterArray fromUTF8Bytes:#[ 16rE6 16r97 16rA5 16rE6 16r9C 16rAC 16rE8 16rAA 16r9E ]
7876
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   334
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   335
   invalid:
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   336
     CharacterArray fromUTF8Bytes:#[ 16rC0 16r80 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   337
     CharacterArray fromUTF8Bytes:#[ 16rE0 16r80 16r80 ]
7876
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   338
    "
443
Claus Gittinger <cg@exept.de>
parents: 428
diff changeset
   339
! !
Claus Gittinger <cg@exept.de>
parents: 428
diff changeset
   340
18194
bec89cec5d13 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18181
diff changeset
   341
1849
9f35f5934ec6 added msdos-latin1 en/decoder (code = #msdos850)
Claus Gittinger <cg@exept.de>
parents: 1669
diff changeset
   342
!CharacterArray class methodsFor:'pattern matching'!
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
   343
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
   344
matchEscapeCharacter
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
   345
    "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
   346
     (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
   347
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
   348
    ^ $\
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
   349
!
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
   350
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   351
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
   352
    "helper for match; return true if the characters from start to stop in
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   353
     aString are matching the scan in matchScan from matchStart to matchStop.
328
claus
parents: 327
diff changeset
   354
     The matchScan is as created by asMatchScanArray.
327
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   355
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   356
     This algorithm is not at all the most efficient;
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   357
     for heavy duty pattern matching, an interface (primitive) to the regex
328
claus
parents: 327
diff changeset
   358
     pattern matching package should be added."
327
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   359
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   360
    |matchEntry
327
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   361
     mStart "{ Class: SmallInteger }"
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   362
     mStop  "{ Class: SmallInteger }"
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   363
     sStart "{ Class: SmallInteger }"
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   364
     sStop  "{ Class: SmallInteger }"
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   365
     mSize  "{ Class: SmallInteger }"
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   366
     sSize  "{ Class: SmallInteger }"
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   367
     index  "{ Class: SmallInteger }"
2561
205ee33decf9 removed unused var
Claus Gittinger <cg@exept.de>
parents: 2554
diff changeset
   368
     quickCheck matchLast nextMatchEntry
986
c3a9f590146d removed unused locals
Claus Gittinger <cg@exept.de>
parents: 915
diff changeset
   369
     checkChar included|
327
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   370
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   371
    mStart := matchStart.
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   372
    mStop := matchStop.
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   373
    sStart := start.
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   374
    sStop := stop.
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   375
16245
d16f9c7d9428 [true] whileTrue: -> #loop
Stefan Vogel <sv@exept.de>
parents: 16212
diff changeset
   376
    [
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   377
"/ Transcript showCR:('match: ''' , (aString copyFrom:sStart to:sStop) ,
3537
916534e86f0c fixed match
Claus Gittinger <cg@exept.de>
parents: 3527
diff changeset
   378
"/                    ''' against:' , (matchScanArray copyFrom:mStart to:mStop) printString).
916534e86f0c fixed match
Claus Gittinger <cg@exept.de>
parents: 3527
diff changeset
   379
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   380
        mSize := mStop - mStart + 1.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   381
        sSize := sStop - sStart + 1.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   382
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   383
        "empty strings match"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   384
        (mSize == 0) ifTrue:[^ (sSize == 0)].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   385
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   386
        matchEntry := matchScanArray at:mStart.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   387
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   388
        "/ the most common case first:
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   389
        (sSize ~~ 0
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   390
        and:[(checkChar := (aString at:sStart)) = matchEntry]) ifTrue:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   391
            "advance by one and continue"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   392
            mStart := mStart + 1.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   393
            sStart := sStart + 1
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   394
        ] ifFalse:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   395
            (matchEntry == #any) ifTrue:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   396
                "restString empty -> no match"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   397
                (sSize == 0) ifTrue:[^ false].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   398
                "# matches single character"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   399
                ((sSize == 1) and:[mSize == 1]) ifTrue:[^ true].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   400
                "advance by one and continue"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   401
                mStart := mStart + 1.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   402
                sStart := sStart + 1
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   403
            ] ifFalse:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   404
                (matchEntry == #anyString) ifTrue:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   405
                    "* alone matches anything"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   406
                    (mSize == 1) ifTrue:[^ true].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   407
                    "restString empty & matchString not empty -> no match"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   408
                    (sSize == 0) ifTrue:[^ false].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   409
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   410
                    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   411
                     try to avoid some of the recursion by checking last
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   412
                     character and continue with shortened strings if possible
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   413
                    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   414
                    quickCheck := false.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   415
                    (mStop >= mStart) ifTrue:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   416
                        matchLast := matchScanArray at:mStop.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   417
                        (matchLast ~~ #anyString) ifTrue:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   418
                            (matchLast == #any) ifTrue:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   419
                                quickCheck := true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   420
                            ] ifFalse:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   421
                                matchLast == (aString at:sStop) ifTrue:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   422
                                    quickCheck := true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   423
                                ] ifFalse:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   424
                                    matchLast isString ifTrue:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   425
                                        quickCheck := matchLast includes:(aString at:sStop)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   426
                                    ]
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   427
                                ]
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   428
                            ]
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   429
                        ]
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   430
                    ].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   431
                    quickCheck ifTrue:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   432
                        "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   433
                         quickCheck ok, advance from the right
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   434
                        "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   435
                        mStop := mStop - 1.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   436
                        sStop := sStop - 1
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   437
                    ] ifFalse:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   438
                        "/ no quick check;
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   439
                        "/ look for the next character(s)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   440
                        "/ and try matching there
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   441
                        "/ (to avoid recursion)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   442
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   443
                        mStart < mStop ifTrue:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   444
                            nextMatchEntry := matchScanArray at:mStart+1.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   445
                            nextMatchEntry isCharacter ifTrue:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   446
                                sStart <= sStop ifTrue:[
16245
d16f9c7d9428 [true] whileTrue: -> #loop
Stefan Vogel <sv@exept.de>
parents: 16212
diff changeset
   447
                                    [
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   448
                                        caseSensitive ifTrue:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   449
                                            index := aString indexOf:nextMatchEntry startingAt:sStart
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   450
                                        ] ifFalse:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   451
                                            index := aString findFirst:[:c | c asLowercase = nextMatchEntry asLowercase]
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   452
                                                             startingAt:sStart.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   453
                                        ].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   454
                                        (index == 0 or:[index > sStop]) ifTrue:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   455
                                            ^ false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   456
                                        ].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   457
                                        (self matchScan:matchScanArray
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   458
                                              from:(mStart + 1)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   459
                                              to:mStop
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   460
                                              with:aString
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   461
                                              from:index
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   462
                                              to:sStop
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   463
                                              caseSensitive:caseSensitive
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   464
                                        ) ifTrue:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   465
                                            ^ true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   466
                                        ].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   467
                                        sStart := index + 1.
16245
d16f9c7d9428 [true] whileTrue: -> #loop
Stefan Vogel <sv@exept.de>
parents: 16212
diff changeset
   468
                                    ] loop.
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   469
                                ]
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   470
                            ]
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   471
                        ].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   472
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   473
                        "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   474
                         no quick check possible;
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   475
                         loop over all possible substrings
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   476
                        "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   477
                        index := sStart.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   478
                        [index <= sStop] whileTrue:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   479
                            (self matchScan:matchScanArray
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   480
                                  from:(mStart + 1)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   481
                                  to:mStop
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   482
                                  with:aString
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   483
                                  from:index
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   484
                                  to:sStop
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   485
                                  caseSensitive:caseSensitive
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   486
                            ) ifTrue:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   487
                                ^ true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   488
                            ].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   489
                            index := index + 1
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   490
                        ].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   491
                        ^ false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   492
                    ].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   493
                ] ifFalse:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   494
                    (matchEntry isString) ifTrue:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   495
                        "testString empty -> no match"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   496
                        (sSize == 0) ifTrue:[^ false].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   497
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   498
                        included := false.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   499
                        "/ checkChar := aString at:sStart.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   500
                        included := matchEntry includes:checkChar.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   501
                        included ifFalse:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   502
                            caseSensitive ifFalse:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   503
                                checkChar isUppercase ifTrue:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   504
                                    included := matchEntry includes:checkChar asLowercase.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   505
                                ] ifFalse:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   506
                                    included := matchEntry includes:checkChar asUppercase.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   507
                                ]
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   508
                            ].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   509
                        ].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   510
                        mStart := mStart + 1.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   511
                        mSize := mSize - 1.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   512
                        included ifFalse:[^ false].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   513
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   514
                        ((sSize == 1) and:[mSize == 0]) ifTrue:[^ true].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   515
                    ] ifFalse:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   516
                        "/ must be single character
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   517
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   518
                        "testString empty ?"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   519
                        (sSize == 0) ifTrue:[^ false].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   520
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   521
                        "first characters equal ?"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   522
                        "/ checkChar := aString at:sStart.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   523
                        caseSensitive ifTrue:[^ false].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   524
                        (checkChar asUppercase ~= matchEntry asUppercase) ifTrue:[^ false].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   525
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   526
                        "advance and continue"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   527
                        mStart := mStart + 1.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   528
                    ].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   529
                    "cut off 1st char and continue"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   530
                    sStart := sStart + 1
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   531
                ]
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   532
            ]
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   533
        ]
16245
d16f9c7d9428 [true] whileTrue: -> #loop
Stefan Vogel <sv@exept.de>
parents: 16212
diff changeset
   534
    ] loop.
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   535
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   536
    "
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   537
     |scanArray s|
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   538
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   539
     scanArray := self matchScanArrayFrom:'*hello'.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   540
     s := 'foo bar hello world'.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   541
     CharacterArray
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   542
         matchScan:scanArray
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   543
         from:1
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   544
         to:scanArray size
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   545
         with:s
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   546
         from:1
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   547
         to:s size
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   548
         caseSensitive:true
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   549
    "
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   550
    "
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   551
     |scanArray s|
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   552
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   553
     scanArray := self matchScanArrayFrom:'*hello*'.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   554
     s := 'foo bar hello world'.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   555
     CharacterArray
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   556
         matchScan:scanArray
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   557
         from:1
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   558
         to:scanArray size
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   559
         with:s
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   560
         from:1
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   561
         to:s size
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   562
         caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   563
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   564
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   565
    "Modified: / 24-07-2011 / 07:17:03 / cg"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   566
    "Modified (comment): / 24-07-2011 / 08:55:14 / cg"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   567
!
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   568
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   569
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
   570
    <resource: #obsolete>
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   571
    "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
   572
     aString are matching the scan in matchScan from matchStart to matchStop.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   573
     The matchScan is as created by asMatchScanArray.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   574
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   575
     This algorithm is not at all the most efficient;
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   576
     for heavy duty pattern matching, an interface (primitive) to the regex
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   577
     pattern matching package should be added."
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   578
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   579
    ^ self
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   580
        matchScan:matchScanArray from:matchStart to:matchStop with:aString from:start to:stop caseSensitive:ignoreCase not
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   581
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   582
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   583
     |scanArray s|
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   584
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   585
     scanArray := self matchScanArrayFrom:'*hello'.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   586
     s := 'foo bar hello world'.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   587
     CharacterArray
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   588
         matchScan:scanArray
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   589
         from:1
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   590
         to:scanArray size
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   591
         with:s
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   592
         from:1
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   593
         to:s size
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   594
         ignoreCase:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   595
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   596
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   597
     |scanArray s|
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   598
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   599
     scanArray := self matchScanArrayFrom:'*hello*'.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   600
     s := 'foo bar hello world'.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   601
     CharacterArray
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   602
         matchScan:scanArray
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   603
         from:1
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   604
         to:scanArray size
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   605
         with:s
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   606
         from:1
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   607
         to:s size
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   608
         ignoreCase:false
13520
52597f7f6ff8 changed:
Claus Gittinger <cg@exept.de>
parents: 13511
diff changeset
   609
    "
52597f7f6ff8 changed:
Claus Gittinger <cg@exept.de>
parents: 13511
diff changeset
   610
52597f7f6ff8 changed:
Claus Gittinger <cg@exept.de>
parents: 13511
diff changeset
   611
    "Modified: / 24-07-2011 / 07:17:03 / cg"
52597f7f6ff8 changed:
Claus Gittinger <cg@exept.de>
parents: 13511
diff changeset
   612
    "Modified (comment): / 24-07-2011 / 08:55:14 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   613
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   614
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   615
matchScanArrayFrom:aString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   616
    "scan a pattern string and decompose it into a scanArray.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   617
     This is processed faster (especially with character ranges), and
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   618
     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
   619
9282
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   620
    ^ self matchScanArrayFrom:aString escapeCharacter:(self matchEscapeCharacter)
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   621
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   622
    "
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   623
     String matchScanArrayFrom:'*ute*'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   624
     String matchScanArrayFrom:'**ute**'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   625
     String matchScanArrayFrom:'*uter'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   626
     String matchScanArrayFrom:'\*uter'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   627
     String matchScanArrayFrom:'[cC]#mpute[rR]'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   628
     String matchScanArrayFrom:'[abcd]*'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   629
     String matchScanArrayFrom:'[a-k]*'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   630
     String matchScanArrayFrom:'*some*compl*ern*'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   631
     String matchScanArrayFrom:'[a-'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   632
     String matchScanArrayFrom:'[a-zA-Z]'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   633
     String matchScanArrayFrom:'[a-z01234A-Z]'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   634
    "
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   635
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   636
    "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
   637
!
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   638
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   639
matchScanArrayFrom:aString escapeCharacter:escape
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   640
    "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
   641
     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
   642
     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
   643
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   644
    |coll
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   645
     idx "{ Class: SmallInteger }"
9282
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   646
     end c1 c2 matchSet previous|
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
   647
5487
cb4c5ae75c63 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5469
diff changeset
   648
    previous := nil.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   649
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   650
    coll := OrderedCollection new.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   651
    idx := 1. end := aString size.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   652
    [idx <= end] whileTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   653
        |char this|
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   654
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   655
        char := aString at:idx.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   656
        char == $* ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   657
            previous ~~ #anyString ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   658
                this := #anyString
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   659
            ]
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   660
        ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   661
            char == $# ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   662
                previous ~~ #anyString ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   663
                    this := #any
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   664
                ]
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   665
            ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   666
                char == $[ ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   667
                    matchSet := IdentitySet new.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   668
                    idx := idx + 1.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   669
                    idx > end ifTrue:[^ nil].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   670
                    char := aString at:idx.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   671
                    c1 := nil.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   672
                    [char ~~ $]] whileTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   673
                        ((char == $-) and:[c1 notNil]) ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   674
                            idx := idx + 1.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   675
                            idx > end ifTrue:[^ nil].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   676
                            c2 := aString at:idx.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   677
                            c1 to:c2 do:[:c | matchSet add:c].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   678
                            c1 := nil.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   679
                            idx := idx + 1.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   680
                        ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   681
                            (char ~~ $]) ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   682
                                matchSet add:char.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   683
                                c1 := char.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   684
                                idx := idx + 1
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   685
                            ]
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   686
                        ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   687
                        idx > end ifTrue:[^ nil].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   688
                        char := aString at:idx
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   689
                    ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   690
                    this := matchSet asString
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   691
                ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   692
                    char == escape ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   693
                        idx := idx + 1.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   694
                        idx > end ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   695
                            "/ mhmh - what should we do here ?
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   696
                            this := char
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   697
                        ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   698
                            this := aString at:idx.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   699
                        ]
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   700
                    ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   701
                        this := char
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   702
                    ]
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   703
                ]
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   704
            ]
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   705
        ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   706
        this notNil ifTrue:[coll add:this. previous := this].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   707
        idx := idx + 1
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   708
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   709
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   710
    ^ coll asArray
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   711
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   712
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   713
     String matchScanArrayFrom:'*ute*'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   714
     String matchScanArrayFrom:'**ute**'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   715
     String matchScanArrayFrom:'*uter'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   716
     String matchScanArrayFrom:'\*uter'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   717
     String matchScanArrayFrom:'[cC]#mpute[rR]'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   718
     String matchScanArrayFrom:'[abcd]*'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   719
     String matchScanArrayFrom:'[a-k]*'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   720
     String matchScanArrayFrom:'*some*compl*ern*'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   721
     String matchScanArrayFrom:'[a-'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   722
     String matchScanArrayFrom:'[a-zA-Z]'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   723
     String matchScanArrayFrom:'[a-z01234A-Z]'
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   724
    "
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   725
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   726
    "Modified: 2.4.1997 / 16:20:29 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   727
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   728
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   729
!CharacterArray class methodsFor:'queries'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   730
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   731
isAbstract
11229
4fa83d5e806d comment
Claus Gittinger <cg@exept.de>
parents: 11179
diff changeset
   732
    "Return if this class is an abstract class.
4fa83d5e806d comment
Claus Gittinger <cg@exept.de>
parents: 11179
diff changeset
   733
     True is returned for CharacterArray here; false for subclasses.
4fa83d5e806d comment
Claus Gittinger <cg@exept.de>
parents: 11179
diff changeset
   734
     Abstract subclasses must redefine again."
4fa83d5e806d comment
Claus Gittinger <cg@exept.de>
parents: 11179
diff changeset
   735
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   736
    ^ self == CharacterArray
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   737
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   738
18181
f180c4847ddc class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18172
diff changeset
   739
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   740
!CharacterArray methodsFor:'Compatibility-ANSI'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   741
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   742
addLineDelimiters
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   743
    "Ansi compatibility - same as withCRs"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   744
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   745
    ^ self withCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   746
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   747
    "Modified: / 13.11.2001 / 19:16:25 / cg"
17543
bb01d670ad82 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17517
diff changeset
   748
!
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   749
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   750
argumentCount
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   751
    "same as #numArgs - return the number of arguments a message with myself
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   752
     as selector would take."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   753
17509
f5e1bb810210 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17508
diff changeset
   754
    ^ self numArgs
17543
bb01d670ad82 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17517
diff changeset
   755
! !
bb01d670ad82 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17517
diff changeset
   756
bb01d670ad82 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17517
diff changeset
   757
!CharacterArray methodsFor:'Compatibility-Dolphin'!
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   758
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   759
copyExpanding:expandTable
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   760
    "return a copy of myself, with translations from the expandTable sliced in.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   761
     The argument is supposed to map from characters to either characters or strings."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   762
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   763
    |ds|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   764
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   765
    ds := WriteStream on:(self species new).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   766
    self do:[:eachChar |
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   767
        |repl|
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   768
17367
cf9f8eaddb84 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17364
diff changeset
   769
        repl := expandTable at:eachChar ifAbsent:[nil].
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   770
        repl isNil ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   771
            ds nextPut:eachChar
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   772
        ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   773
            repl size == 0 ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   774
                ds nextPut:repl
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   775
            ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   776
                ds nextPutAll:repl
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   777
            ]
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   778
        ].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   779
    ].
6870
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   780
    ^ ds contents.
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   781
!
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   782
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   783
formatWith:aString
11955
1230c6953d49 comments
Claus Gittinger <cg@exept.de>
parents: 11919
diff changeset
   784
    "Compatibility method - do not use in new code.
1230c6953d49 comments
Claus Gittinger <cg@exept.de>
parents: 11919
diff changeset
   785
     same as #bindWith: for dolphin compatibility"
6870
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   786
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   787
    ^ self bindWith:aString
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   788
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   789
    "
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   790
     'hello%1world' formatWith:'123'
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   791
    "
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   792
!
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   793
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   794
formatWith:arg1 with:arg2
11955
1230c6953d49 comments
Claus Gittinger <cg@exept.de>
parents: 11919
diff changeset
   795
    "Compatibility method - do not use in new code.
1230c6953d49 comments
Claus Gittinger <cg@exept.de>
parents: 11919
diff changeset
   796
     same as #bindWith: for dolphin compatibility"
6870
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   797
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   798
    ^ self bindWith:arg1 with:arg2
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   799
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   800
    "
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   801
     'hello%1 %2world' formatWith:'123' with:234
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   802
    "
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   803
!
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   804
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   805
formatWith:arg1 with:arg2 with:arg3
11955
1230c6953d49 comments
Claus Gittinger <cg@exept.de>
parents: 11919
diff changeset
   806
    "Compatibility method - do not use in new code.
1230c6953d49 comments
Claus Gittinger <cg@exept.de>
parents: 11919
diff changeset
   807
     same as #bindWith: for dolphin compatibility"
6870
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   808
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   809
    ^ self bindWith:arg1 with:arg2 with:arg3
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   810
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
     'hello%1 %2 %3world' formatWith:'123' with:234 with:345
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   813
    "
6391
ff9f6df9ec4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6228
diff changeset
   814
! !
ff9f6df9ec4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6228
diff changeset
   815
14681
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   816
!CharacterArray methodsFor:'Compatibility-GNU'!
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   817
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   818
% anArrayOfOperands
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   819
    "return a copy of the receiver, where a '%i' escape
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   820
     is replaced by the coresponding string from the argument array.
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   821
     '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
   822
     Added for GNU-ST compatibility."
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   823
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   824
    ^ self expandPlaceholdersWith:anArrayOfOperands
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   825
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   826
    "
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   827
     'do you prefer %1 or rather %2 (not talking about %3) ?'
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   828
        % #('smalltalk' 'c++' 'c')
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   829
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   830
     'do you %(what) ?'
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   831
        % (Dictionary new at:#'what' put:'understand'; yourself)
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   832
    "
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   833
! !
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   834
7261
f35fc9cee675 method category rename
Claus Gittinger <cg@exept.de>
parents: 7247
diff changeset
   835
!CharacterArray methodsFor:'Compatibility-ST/V'!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   836
17517
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
   837
asArrayOfSubstrings
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
   838
    "return an array of substrings from the receiver, interpreting
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
   839
     separators (i.e. spaces & newlines) as word-delimiters.
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
   840
     This has been added for ST/V compatibility; the actual work is done
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
   841
     in asCollectionOfWords.
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
   842
     (sigh: it is called #'subStrings' in V'Age, #'substrings' in Squeak 
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
   843
     and #'asCollectionOfWords' in ST/X) "
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
   844
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
   845
    ^ self asCollectionOfWords asArray
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
   846
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
   847
    "
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
   848
     '1 one two three four 5 five' asArrayOfSubstrings
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
   849
     '1
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
   850
one
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
   851
        two three four 5 five' asArrayOfSubstrings
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
   852
    "
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
   853
!
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
   854
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   855
byteAt:index put:aByte
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   856
    "store a byte at given index.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   857
     This is an ST/V compatibility method."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   858
1333
d3fdca956f0d allow storing of 0-bytes (be careful with printing then ...)
Claus Gittinger <cg@exept.de>
parents: 1312
diff changeset
   859
"/    (aByte == 0) ifTrue:[
d3fdca956f0d allow storing of 0-bytes (be careful with printing then ...)
Claus Gittinger <cg@exept.de>
parents: 1312
diff changeset
   860
"/        "store a space instead"
d3fdca956f0d allow storing of 0-bytes (be careful with printing then ...)
Claus Gittinger <cg@exept.de>
parents: 1312
diff changeset
   861
"/        ^ 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
   862
"/    ].
11754
5132248cfd6e common definition of #byteAt:put between CharacterArray and Symbol
Stefan Vogel <sv@exept.de>
parents: 11632
diff changeset
   863
    ^ self basicAt:index put:(Character value:aByte)
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   864
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   865
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   866
     'hello' copy at:1 put:$H asciiValue; yourself
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   867
     'hello' copy byteAt:1 put:72; yourself
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   868
     'hello' copy byteAt:1 put:0; yourself
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   869
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   870
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   871
    "Modified: 6.5.1996 / 10:35:26 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   872
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   873
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   874
replChar:oldChar with:newChar
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   875
    "return a copy of the receiver, with all oldChars replaced
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   876
     by newChar.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   877
     This is an ST/V compatibility method."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   878
3656
347ea0413b68 use #copyReplaceAll:with:
Claus Gittinger <cg@exept.de>
parents: 3630
diff changeset
   879
    ^ self copyReplaceAll:oldChar with:newChar
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   880
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   881
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   882
     '12345678901234567890' replChar:$0 with:$*
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   883
    "
3656
347ea0413b68 use #copyReplaceAll:with:
Claus Gittinger <cg@exept.de>
parents: 3630
diff changeset
   884
347ea0413b68 use #copyReplaceAll:with:
Claus Gittinger <cg@exept.de>
parents: 3630
diff changeset
   885
    "Modified: / 18.7.1998 / 22:52:57 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   886
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   887
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   888
replChar:oldChar withString:newString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   889
    "return a copy of the receiver, with all oldChars replaced
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   890
     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
   891
     This is an ST/V compatibility method."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   892
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   893
    |tmpStream|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   894
15523
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
   895
    tmpStream := self species writeStream.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   896
    self do:[:element |
15523
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
   897
        element = oldChar ifTrue:[
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
   898
            tmpStream nextPutAll:newString
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
   899
        ] ifFalse:[
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
   900
            tmpStream nextPut:element
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
   901
        ].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   902
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   903
    ^ tmpStream contents
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   904
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   905
   "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   906
     '12345678901234567890' replChar:$0 withString:'foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   907
     'a string with spaces' replChar:$  withString:' foo '
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   908
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   909
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   910
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   911
replString:subString withString:newString
4244
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   912
    "return a copy of the receiver, with all sequences of subString replaced
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   913
     by newString (i.e. slice in the newString in place of the oldString)."
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   914
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
   915
    ^ self copyReplaceString:subString withString:newString
4244
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   916
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   917
   "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   918
     '12345678901234567890' replString:'123' withString:'OneTwoThree'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   919
     '12345678901234567890' replString:'123' withString:'*'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   920
     '12345678901234567890' replString:'234' withString:'foo'
4244
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   921
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   922
     ('a string with spaces' replChar:$  withString:' foo ')
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   923
        replString:'foo' withString:'bar'
4244
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   924
    "
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   925
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
   926
    "Modified: / 12-05-2004 / 12:00:27 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   927
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   928
9275
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   929
subString:start to:end
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   930
    ^ self copyFrom:start to:end
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   931
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   932
   "
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   933
     '12345678901234567890' subString:3 to:8
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   934
    "
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   935
!
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   936
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   937
trimBlanks
14992
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
   938
    "return a copy of the receiver without leading and trailing spaces.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   939
     This is an ST/V compatibility method."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   940
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   941
    ^ self withoutSpaces
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   942
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   943
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   944
     '    spaces at beginning' trimBlanks
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   945
     'spaces at end    ' trimBlanks
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   946
     '    spaces at beginning and end     ' trimBlanks
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   947
     'no spaces' trimBlanks
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   948
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   949
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   950
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   951
!CharacterArray methodsFor:'Compatibility-Squeak'!
4409
86e049b21f8d added #includesSubstring:caseSensitive:
Claus Gittinger <cg@exept.de>
parents: 4389
diff changeset
   952
6148
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   953
asDate
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   954
    "Many allowed forms, see Date.readFrom:"
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   955
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   956
    ^ Date readFrom: (ReadStream on: self)
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   957
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   958
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   959
     '30 Apr 1999' asDate dayName capitalized
6148
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   960
    "
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   961
!
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   962
16051
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
   963
asOneByteString
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
   964
    "return the receiver converted to a 'normal' string.
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
   965
     Same as asSingleByteString - for compatibility."
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
   966
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
   967
    ^ self asSingleByteString
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
   968
!
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
   969
8971
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
   970
asUrl
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
   971
    ^ self asURL
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
   972
!
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
   973
10840
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   974
asWideString
14405
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
   975
    "return a two-byte string containing the same characters as the receiver"
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
   976
10840
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   977
    ^ self asTwoByteString
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   978
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   979
    "
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   980
     'abc' asWideString
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   981
    "
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   982
!
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   983
4989
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   984
capitalized
14405
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
   985
    "same as asUppercaseFirst for Squeak compatibility"
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
   986
4989
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   987
    ^ self asUppercaseFirst
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   988
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   989
    "
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   990
     'hello' capitalized
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   991
    "
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   992
!
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   993
10841
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   994
caseInsensitiveLessOrEqual:aString
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   995
    ^ (self compareCaselessWith:aString) <= 0
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   996
!
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   997
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   998
caseSensitiveLessOrEqual:aString
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   999
    ^ self <= aString
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1000
!
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1001
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1002
charactersExactlyMatching:aString
14405
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  1003
    "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
  1004
10841
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1005
    |idx nMax|
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1006
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1007
    nMax :=(self size) min:(aString size).
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1008
    idx := 1.
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1009
    [idx <= nMax] whileTrue:[
14405
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  1010
        (self at:idx) = (aString at:idx) ifFalse:[
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  1011
            ^ idx - 1
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  1012
        ].
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  1013
        idx := idx + 1.
10841
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1014
    ].
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1015
    ^ nMax
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1016
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1017
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1018
     'abc' charactersExactlyMatching:'abc'
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1019
     'abc' charactersExactlyMatching:'abcd'
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1020
     'abcd' charactersExactlyMatching:'abc'
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1021
     'abc' charactersExactlyMatching:'abd'
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  1022
     'abc' charactersExactlyMatching:'xxx'
10841
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1023
    "
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1024
!
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
  1025
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1026
endsWithDigit
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1027
    "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
  1028
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1029
    ^ self size > 0 and: [self last isDigit]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1030
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1031
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  1032
findDelimiters:delimiters startingAt:start
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1033
    "Answer the index of the character within the receiver, starting at start, that matches one of the delimiters. If the receiver does not contain any of the delimiters, answer size + 1."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1034
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1035
    |idx|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1036
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1037
    idx := self indexOfAny:delimiters startingAt:start.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1038
    idx == 0 ifTrue:[^ self size + 1].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1039
    ^ idx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1040
"/start to: self size do: [:i |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1041
"/        |char|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1042
"/
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1043
"/        char := self at: i.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1044
"/        delimiters do: [:delim | delim = char ifTrue: [^ i]]
8971
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
  1045
"/    ].
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
  1046
"/    ^ self size + 1
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
  1047
!
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
  1048
13624
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
  1049
findTokens:delimiterOrDelimiters
7270
37248a67718a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7265
diff changeset
  1050
    "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
  1051
13624
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
  1052
    delimiterOrDelimiters size == 0 ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1053
        ^ self asCollectionOfSubstringsSeparatedBy:delimiterOrDelimiters
13624
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
  1054
    ] ifFalse:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1055
        ^ self asCollectionOfSubstringsSeparatedByAny:delimiterOrDelimiters
13624
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
  1056
    ].
7270
37248a67718a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7265
diff changeset
  1057
37248a67718a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7265
diff changeset
  1058
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1059
     'a|b#c||e' findTokens:#($# $|)
13624
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
  1060
     'a|b#c||e' findTokens:$|
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
  1061
    "
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
  1062
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
  1063
    "Modified: / 04-09-2011 / 20:31:21 / cg"
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
  1064
    "Modified (comment): / 05-09-2011 / 04:25:28 / cg"
4981
2ee8cd2c4c8e squeak compatibility
ps
parents: 4974
diff changeset
  1065
!
2ee8cd2c4c8e squeak compatibility
ps
parents: 4974
diff changeset
  1066
4974
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
  1067
includesSubString:aString
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
  1068
    "return true, if a substring is contained in the receiver.
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
  1069
     The compare is case sensitive."
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
  1070
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
  1071
    ^ self includesString:aString
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
  1072
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
  1073
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1074
     'hello world' includesSubString:'Hel'
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1075
     'hello world' includesSubString:'hel'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1076
     'hello world' includesSubString:'llo'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1077
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1078
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1079
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1080
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1081
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1082
11178
668d5d9a4d5d added #includesSubString:caseSensitive:
sr
parents: 11062
diff changeset
  1083
includesSubString:aString caseSensitive:caseSensitive
11179
178086a92325 *** empty log message ***
sr
parents: 11178
diff changeset
  1084
    ^ self includesSubstring:aString caseSensitive:caseSensitive
11178
668d5d9a4d5d added #includesSubString:caseSensitive:
sr
parents: 11062
diff changeset
  1085
!
668d5d9a4d5d added #includesSubString:caseSensitive:
sr
parents: 11062
diff changeset
  1086
16875
32e61bb3a742 class: CharacterArray>>#includesSubstring: (for Squeak compatibility)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16863
diff changeset
  1087
includesSubstring: aString
32e61bb3a742 class: CharacterArray>>#includesSubstring: (for Squeak compatibility)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16863
diff changeset
  1088
    ^ self includesSubString: aString
32e61bb3a742 class: CharacterArray>>#includesSubstring: (for Squeak compatibility)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16863
diff changeset
  1089
32e61bb3a742 class: CharacterArray>>#includesSubstring: (for Squeak compatibility)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16863
diff changeset
  1090
    "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
  1091
!
32e61bb3a742 class: CharacterArray>>#includesSubstring: (for Squeak compatibility)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16863
diff changeset
  1092
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1093
includesSubstring:aString caseSensitive:caseSensitive
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1094
    "return true, if a substring is contained in the receiver.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1095
     The argument, caseSensitive controls if case is ignored in the compare."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1096
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1097
    "/ for now,  a q&d hack ...
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1098
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1099
    caseSensitive ifFalse:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1100
        ^ self asLowercase includesString:aString asLowercase
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1101
    ].
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1102
    ^ self includesString:aString
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1103
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1104
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1105
     'hello world' includesSubstring:'Hel' caseSensitive:true
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1106
     'hello world' includesSubstring:'Hel' caseSensitive:false
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1107
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1108
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1109
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1110
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1111
!
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1112
6979
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1113
isAllDigits
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1114
    "Answer whether the receiver's characters are all digits"
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1115
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1116
    ^ self conform:[:eachChar | eachChar isDigit]
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1117
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1118
    "
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1119
     'hello world' isAllDigits
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1120
     '12344' isAllDigits
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1121
    "
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1122
!
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1123
4890
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1124
lastSpacePosition
14405
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  1125
    "return the index of the last space character; 0 if there is none"
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  1126
4890
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1127
    ^ self lastIndexOfSeparator
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1128
!
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1129
7022
0c3c73f83b7f padded:to:with: - for squeak
penk
parents: 7020
diff changeset
  1130
padded:leftOrRight to:paddedSize with:padCharacter
14053
acbb97913c30 comment/format in: #padded:to:with:
Claus Gittinger <cg@exept.de>
parents: 14050
diff changeset
  1131
    "pad left (leftOrRight==#left) or right"
acbb97913c30 comment/format in: #padded:to:with:
Claus Gittinger <cg@exept.de>
parents: 14050
diff changeset
  1132
7022
0c3c73f83b7f padded:to:with: - for squeak
penk
parents: 7020
diff changeset
  1133
    leftOrRight == #left ifTrue:[
14053
acbb97913c30 comment/format in: #padded:to:with:
Claus Gittinger <cg@exept.de>
parents: 14050
diff changeset
  1134
        ^ self leftPaddedTo:paddedSize with:padCharacter
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1135
    ].
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1136
    ^ self paddedTo:paddedSize with:padCharacter
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1137
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1138
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1139
     'hello' padded:#right to:10 with:$.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1140
     'hello' padded:#left to:10 with:$.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1141
    "
14053
acbb97913c30 comment/format in: #padded:to:with:
Claus Gittinger <cg@exept.de>
parents: 14050
diff changeset
  1142
acbb97913c30 comment/format in: #padded:to:with:
Claus Gittinger <cg@exept.de>
parents: 14050
diff changeset
  1143
    "Modified (comment): / 07-03-2012 / 16:31:33 / cg"
9192
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
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1146
skipDelimiters:delimiters startingAt:start
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1147
    "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
  1148
     that does NOT match one of the delimiters.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1149
     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
  1150
     Assumes the delimiters to be a non-empty string."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1151
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1152
    start to:self size do:[:i |
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1153
        delimiters detect:[:delim | delim = (self at:i) ] ifNone:[ ^ i ]
9192
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
    ^ self size + 1
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
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1158
     '123***7890' skipDelimiters:'*' startingAt:4
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1159
     '123***7890' skipDelimiters:'*' startingAt:3
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1160
     '123***7890' skipDelimiters:'*' startingAt:10
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1161
     '123*******' skipDelimiters:'*' startingAt:10
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1162
    "
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1163
!
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1164
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1165
substrings
17517
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
  1166
    "return an array consisting of all words contained in the receiver.
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
  1167
     Words are separated by whitespace.
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
  1168
     This has been added for Squeak compatibility.
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
  1169
     (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
  1170
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1171
    ^ self asCollectionOfWords
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1172
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1173
    "
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1174
     'foo bar baz' substrings
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1175
    "
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1176
!
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1177
12665
b027fc5aec4e added: #substringsSeparatedBy:
Claus Gittinger <cg@exept.de>
parents: 12664
diff changeset
  1178
substringsSeparatedBy:separatorCharacter
b027fc5aec4e added: #substringsSeparatedBy:
Claus Gittinger <cg@exept.de>
parents: 12664
diff changeset
  1179
    ^ self asCollectionOfSubstringsSeparatedBy:separatorCharacter
b027fc5aec4e added: #substringsSeparatedBy:
Claus Gittinger <cg@exept.de>
parents: 12664
diff changeset
  1180
b027fc5aec4e added: #substringsSeparatedBy:
Claus Gittinger <cg@exept.de>
parents: 12664
diff changeset
  1181
    "
b027fc5aec4e added: #substringsSeparatedBy:
Claus Gittinger <cg@exept.de>
parents: 12664
diff changeset
  1182
     'foo bar, baz' substringsSeparatedBy:$,
b027fc5aec4e added: #substringsSeparatedBy:
Claus Gittinger <cg@exept.de>
parents: 12664
diff changeset
  1183
    "
b027fc5aec4e added: #substringsSeparatedBy:
Claus Gittinger <cg@exept.de>
parents: 12664
diff changeset
  1184
!
b027fc5aec4e added: #substringsSeparatedBy:
Claus Gittinger <cg@exept.de>
parents: 12664
diff changeset
  1185
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1186
truncateTo:smallSize
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1187
    "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
  1188
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1189
    self size <= smallSize ifTrue:[^ self].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1190
    ^ self copyFrom: 1 to: smallSize
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
     'hello world' truncateTo:5
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1194
     'hello' truncateTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1195
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1196
     'hello world' copyTo:5
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1197
     'hello' copyTo:10
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
!
5795
d67a8ff4d98e added #truncateTo:
Claus Gittinger <cg@exept.de>
parents: 5794
diff changeset
  1200
4890
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1201
withBlanksTrimmed
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1202
    "Return a copy of the receiver from which leading and trailing blanks have been trimmed."
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1203
14865
8d6cc362aff7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14768
diff changeset
  1204
    ^ 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
  1205
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1206
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1207
     '  hello    world    ' withBlanksTrimmed
4890
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1208
    "
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1209
!
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1210
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1211
withNoLineLongerThan: aNumber
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1212
    "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
  1213
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1214
    | listOfLines currentLast currentStart resultString putativeLast putativeLine crPosition |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1215
14451
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1216
    (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
  1217
    listOfLines _ OrderedCollection new.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1218
    currentLast _ 0.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1219
    [currentLast < self size] whileTrue:
14451
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1220
            [currentStart _ currentLast + 1.
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1221
            putativeLast _ (currentStart + aNumber - 1) min: self size.
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1222
            putativeLine _ self copyFrom: currentStart to: putativeLast.
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1223
            (crPosition _ putativeLine indexOf: Character cr) > 0 ifTrue:
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1224
                    [putativeLast _ currentStart + crPosition - 1.
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1225
                    putativeLine _ self copyFrom: currentStart to: putativeLast].
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1226
            currentLast _ putativeLast == self size
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1227
                    ifTrue:
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1228
                            [putativeLast]
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1229
                    ifFalse:
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1230
                            [currentStart + putativeLine lastSpacePosition - 1].
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1231
            currentLast <= currentStart ifTrue:
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1232
                    ["line has NO spaces; baleout!!"
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1233
                    currentLast _ putativeLast].
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1234
            listOfLines add: (self copyFrom: currentStart to: currentLast) withBlanksTrimmed].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1235
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1236
    listOfLines size > 0 ifFalse: [^ ''].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1237
    resultString _ listOfLines first.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1238
    2 to: listOfLines size do:
14451
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1239
            [:i | resultString _ resultString, Character cr asString, (listOfLines at: i)].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1240
    ^ resultString
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
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1243
     #(5 7 20) collect:
14451
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1244
        [:i | 'Fred the bear went down to the brook to read his book in silence' withNoLineLongerThan: i]
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1245
    "
10883
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1246
!
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1247
12343
0a93eee37d65 added: #withSqueakLineEndings
Claus Gittinger <cg@exept.de>
parents: 12330
diff changeset
  1248
withSqueakLineEndings
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1249
    "assume the string is textual, and that CR, LF, and CRLF are all
12343
0a93eee37d65 added: #withSqueakLineEndings
Claus Gittinger <cg@exept.de>
parents: 12330
diff changeset
  1250
    valid line endings.  Replace each occurence with a single CR"
0a93eee37d65 added: #withSqueakLineEndings
Claus Gittinger <cg@exept.de>
parents: 12330
diff changeset
  1251
0a93eee37d65 added: #withSqueakLineEndings
Claus Gittinger <cg@exept.de>
parents: 12330
diff changeset
  1252
    ^ self asStringCollection asStringWith:Character cr.
0a93eee37d65 added: #withSqueakLineEndings
Claus Gittinger <cg@exept.de>
parents: 12330
diff changeset
  1253
!
0a93eee37d65 added: #withSqueakLineEndings
Claus Gittinger <cg@exept.de>
parents: 12330
diff changeset
  1254
12188
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1255
withoutLeading: char
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1256
    "return a copy of myself without leading a char.
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1257
     Returns an empty string, if the receiver consist only of a char."
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1258
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1259
    ^ self withoutLeadingForWhich:[:ch | ch = char]
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1260
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1261
    "
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1262
     '****foo****' withoutLeading: $*
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1263
     'foo****'     withoutLeading: $*
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1264
     '*'           withoutLeading: $*
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1265
     ''            withoutLeading: $*
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1266
     '****foo'     withoutLeading: $*
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1267
     '*******'     withoutLeading: $*
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1268
     'foo'         withoutLeading: $*
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1269
     'f***o***o'   withoutLeading: $*
12188
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1270
     ('**' , Character tab asString , '*foo***') withoutLeading: $* inspect
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1271
    "
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1272
!
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1273
11565
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1274
withoutTrailing:char
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1275
    "return a copy of myself without trailing char.
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1276
     Returns an empty string, if the receiver consist only of char."
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1277
12188
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1278
    ^ self withoutTrailingForWhich:[:ch | ch = char]
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1279
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1280
    "
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1281
     '    foo....' withoutTrailing:$.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1282
     'foo....'     withoutTrailing:$.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1283
     '    foo'     withoutTrailing:$.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1284
     '.......'     withoutTrailing:$.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1285
     'foo'         withoutTrailing:$.
11565
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1286
    "
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1287
! !
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1288
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1289
!CharacterArray methodsFor:'Compatibility-V''Age'!
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1290
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1291
addLineDelimiter
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1292
    "replace all '\'-characters by line delimiter (cr) - characters.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1293
     This has been added for VisualAge compatibility."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1294
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1295
    ^ self withCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1296
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1297
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1298
bindWith:aString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1299
    "return a copy of the receiver, where a '%1' escape is
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1300
     replaced by aString.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1301
     This has been added for VisualAge compatibility."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1302
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1303
    ^ self expandPlaceholdersWith:(Array with:aString)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1304
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1305
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1306
     'do you like %1 ?' bindWith:'smalltalk'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1307
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1308
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1309
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1310
bindWith:string1 with:string2
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1311
    "return a copy of the receiver, where a '%1' escape is
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1312
     replaced by string1 and '%2' is replaced by string2.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1313
     This has been added for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1314
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1315
    ^ self expandPlaceholdersWith:(Array with:string1 with:string2)
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1316
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1317
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1318
     'do you prefer %1 or rather %2 ?'
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1319
        bindWith:'smalltalk' with:'c++'
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1320
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1321
!
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1322
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1323
bindWith:str1 with:str2 with:str3
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1324
    "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
  1325
     are replaced by str1, str2 and str3 respectively.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1326
     This has been added for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1327
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1328
    ^ self expandPlaceholdersWith:(Array with:str1 with:str2 with:str3)
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1329
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1330
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1331
     'do you prefer %1 or rather %2 (not talking about %3) ?'
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1332
        bindWith:'smalltalk' with:'c++' with:'c'
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1333
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1334
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1335
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1336
bindWith:str1 with:str2 with:str3 with:str4
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1337
    "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
  1338
     are replaced by str1, str2, str3 and str4 respectively.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1339
     This has been added for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1340
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1341
    ^ self expandPlaceholdersWith:(Array with:str1 with:str2 with:str3 with:str4)
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1342
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1343
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1344
     'do you prefer %1 or rather %2 (not talking about %3 or even %4) ?'
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1345
        bindWith:'smalltalk' with:'c++' with:'c' with:'assembler'
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1346
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1347
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1348
2344
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1349
bindWith:str1 with:str2 with:str3 with:str4 with:str5
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1350
    "return a copy of the receiver, where a '%1' .. '%5' escapes
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1351
     are replaced by str1 .. str5 respectively.
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1352
     This has been added for VisualAge compatibility."
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1353
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1354
    ^ 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
  1355
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1356
    "Created: 31.1.1997 / 16:25:42 / cg"
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1357
!
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1358
5343
bac9bc59a698 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5342
diff changeset
  1359
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
  1360
    "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
  1361
     are replaced by str1 .. str6 respectively.
5343
bac9bc59a698 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5342
diff changeset
  1362
     This has been added for VisualAge compatibility."
bac9bc59a698 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5342
diff changeset
  1363
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1364
    ^ self expandPlaceholdersWith:(Array with:str1 with:str2
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1365
                                         with:str3 with:str4
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1366
                                         with:str5 with:str6)
11524
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1367
!
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1368
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1369
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
  1370
    "return a copy of the receiver, where a '%1' .. '%7' escapes
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1371
     are replaced by str1 .. str7 respectively.
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1372
     This has been added for VisualAge compatibility."
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1373
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1374
    ^ self expandPlaceholdersWith:(Array with:str1 with:str2
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1375
                                         with:str3 with:str4
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1376
                                         with:str5 with:str6
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1377
                                         with:str7)
5343
bac9bc59a698 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5342
diff changeset
  1378
!
bac9bc59a698 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5342
diff changeset
  1379
13996
a86faa4f17b8 added: #bindWith:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13987
diff changeset
  1380
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
  1381
    "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
  1382
     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
  1383
     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
  1384
a86faa4f17b8 added: #bindWith:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13987
diff changeset
  1385
    ^ self expandPlaceholdersWith:(Array with:str1 with:str2
a86faa4f17b8 added: #bindWith:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13987
diff changeset
  1386
                                         with:str3 with:str4
a86faa4f17b8 added: #bindWith:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13987
diff changeset
  1387
                                         with:str5 with:str6
a86faa4f17b8 added: #bindWith:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13987
diff changeset
  1388
                                         with:str7 with:str8)
a86faa4f17b8 added: #bindWith:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13987
diff changeset
  1389
a86faa4f17b8 added: #bindWith:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13987
diff changeset
  1390
    "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
  1391
!
a86faa4f17b8 added: #bindWith:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13987
diff changeset
  1392
14014
3aff2d7c41c8 added: #bindWith:with:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13996
diff changeset
  1393
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
  1394
    "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
  1395
     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
  1396
     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
  1397
3aff2d7c41c8 added: #bindWith:with:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13996
diff changeset
  1398
    ^ self expandPlaceholdersWith:(Array with:str1 with:str2
3aff2d7c41c8 added: #bindWith:with:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13996
diff changeset
  1399
                                         with:str3 with:str4
3aff2d7c41c8 added: #bindWith:with:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13996
diff changeset
  1400
                                         with:str5 with:str6
3aff2d7c41c8 added: #bindWith:with:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13996
diff changeset
  1401
                                         with:str7 with:str8
3aff2d7c41c8 added: #bindWith:with:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13996
diff changeset
  1402
                                         with:str9)
3aff2d7c41c8 added: #bindWith:with:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13996
diff changeset
  1403
3aff2d7c41c8 added: #bindWith:with:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13996
diff changeset
  1404
    "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
  1405
!
3aff2d7c41c8 added: #bindWith:with:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13996
diff changeset
  1406
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1407
bindWithArguments:anArrayOfStrings
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1408
    "return a copy of the receiver, where a '%i' escape
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1409
     is replaced by the coresponding string from the argument array.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1410
     '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
  1411
     This has been added for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1412
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1413
    ^ self expandPlaceholdersWith:anArrayOfStrings
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1414
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1415
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1416
     'do you prefer %1 or rather %2 (not talking about %3) ?'
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1417
        bindWithArguments:#('smalltalk' 'c++' 'c')
12196
5718ecf81f37 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 12188
diff changeset
  1418
5718ecf81f37 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 12188
diff changeset
  1419
     'do you %(what) ?'
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1420
        bindWithArguments:(Dictionary new at:#'what' put:'understand'; yourself)
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1421
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1422
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1423
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1424
subStrings
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1425
    "return an array consisting of all words contained in the receiver.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1426
     Words are separated by whitespace.
17517
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
  1427
     This has been added for VisualAge compatibility.
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
  1428
     (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
  1429
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1430
    ^ self asCollectionOfWords
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1431
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1432
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1433
     'hello world, this is smalltalk' subStrings
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1434
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1435
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1436
16181
14e0c2a81b72 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16175
diff changeset
  1437
subStrings:separatorCharacterOrString
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1438
    "return an array consisting of all words contained in the receiver.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1439
     Words are separated by separatorCharacter.
17233
2e3faa540679 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17215
diff changeset
  1440
     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
  1441
16181
14e0c2a81b72 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16175
diff changeset
  1442
    separatorCharacterOrString isCharacter ifTrue:[
14e0c2a81b72 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16175
diff changeset
  1443
        ^ self asCollectionOfSubstringsSeparatedBy:separatorCharacterOrString
14e0c2a81b72 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16175
diff changeset
  1444
    ].
14e0c2a81b72 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16175
diff changeset
  1445
    ^ self asCollectionOfSubstringsSeparatedByAny:separatorCharacterOrString
14e0c2a81b72 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16175
diff changeset
  1446
14e0c2a81b72 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16175
diff changeset
  1447
    "
14e0c2a81b72 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16175
diff changeset
  1448
     'foo:bar:baz:smalltalk' subStrings:$: 
14e0c2a81b72 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16175
diff changeset
  1449
     'foo:bar:baz:smalltalk' subStrings:':'
14e0c2a81b72 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16175
diff changeset
  1450
     'foo.bar,baz-smalltalk' subStrings:'.,-'
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1451
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1452
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1453
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1454
trimSeparators
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1455
    "return a copy of the receiver without leading and trailing whiteSpace"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1456
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1457
    ^ self withoutSeparators
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1458
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1459
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1460
!CharacterArray methodsFor:'Compatibility-VW'!
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1461
16051
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  1462
asComposedText
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  1463
    "ST-80 compatibility
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  1464
     - ST/X does not (as today) support composedTexts."
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  1465
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  1466
    ^ ComposedText fromString:self string
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  1467
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  1468
    "Modified: 27.4.1996 / 13:30:30 / cg"
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  1469
!
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  1470
6139
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1471
asLogicalFileSpecification
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1472
    ^ self asFilename
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1473
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1474
    "Created: / 30.10.2001 / 17:29:53 / cg"
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1475
!
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1476
6119
b6cee2c2b2ea +asQualifiedReference
Claus Gittinger <cg@exept.de>
parents: 5964
diff changeset
  1477
asQualifiedReference
b6cee2c2b2ea +asQualifiedReference
Claus Gittinger <cg@exept.de>
parents: 5964
diff changeset
  1478
    ^ BindingReference pathString:(self string)
b6cee2c2b2ea +asQualifiedReference
Claus Gittinger <cg@exept.de>
parents: 5964
diff changeset
  1479
b6cee2c2b2ea +asQualifiedReference
Claus Gittinger <cg@exept.de>
parents: 5964
diff changeset
  1480
!
b6cee2c2b2ea +asQualifiedReference
Claus Gittinger <cg@exept.de>
parents: 5964
diff changeset
  1481
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1482
expandMacros
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1483
    "ST80 compatibility - expand '<..>' macros with
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1484
     argument strings. Similar to #bindWith:.
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1485
     Read the comment in #expandMacrosWithArguments: about
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1486
     limited compatibility issues."
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1487
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1488
    ^ self expandMacrosWithArguments:#()
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1489
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1490
    "
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1491
     'hello<n>foo' expandMacros
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1492
    "
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1493
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1494
    "Modified: / 18.6.1998 / 16:03:02 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1495
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1496
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1497
expandMacrosWith:arg
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1498
    "ST80 compatibility - expand '<..>' macros with
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1499
     argument strings. Similar to #bindWith:.
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1500
     Read the comment in #expandMacrosWithArguments: about
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1501
     limited compatibility issues."
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1502
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1503
    ^ self expandMacrosWithArguments:(Array with:arg)
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
    "Created: / 1.11.1997 / 13:01:28 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1506
    "Modified: / 1.11.1997 / 13:30:50 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1507
!
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1508
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1509
expandMacrosWith:arg1 with:arg2
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1510
    "ST80 compatibility - expand '<..>' macros with
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1511
     argument strings. Similar to #bindWith:.
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1512
     Read the comment in #expandMacrosWithArguments: about
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1513
     limited compatibility issues."
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1514
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1515
    ^ self expandMacrosWithArguments:(Array with:arg1 with:arg2)
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1516
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1517
    "Modified: / 6.7.1998 / 21:58:14 / cg"
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1518
!
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1519
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1520
expandMacrosWith:arg1 with:arg2 with:arg3
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:(Array with:arg1 with:arg2 with:arg3)
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
10353
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1529
expandMacrosWith:arg1 with:arg2 with:arg3 with:arg4
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1530
    "ST80 compatibility - expand '<..>' macros with
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1531
     argument strings. Similar to #bindWith:.
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1532
     Read the comment in #expandMacrosWithArguments: about
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1533
     limited compatibility issues."
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1534
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1535
    ^ 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
  1536
!
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1537
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1538
expandMacrosWithArguments:argArray
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1539
    "ST80 compatibility - expand '<..>' macros with
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1540
     argument strings. Similar to #bindWith:.
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1541
     WARNING: possibly not all ST80 expansions are supported here."
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1542
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1543
    "/ supported expansions:
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1544
    "/
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1545
    "/   <#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
  1546
    "/   <#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
  1547
    "/   <#?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
  1548
    "/              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
  1549
    "/   <n>        replace by a newLine character
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1550
    "/   <t>        replace by a tab character
6834
eba4b58b8692 fixed expandMacros (%-escape)
Claus Gittinger <cg@exept.de>
parents: 6810
diff changeset
  1551
    "/   %X         the X character itself
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1552
8999
f3fda66ea51e #expandMacrosWithArguments: - be mor friendly to xml strings.
Stefan Vogel <sv@exept.de>
parents: 8971
diff changeset
  1553
    |in out c fmt nr arg s1 s2 peekc|
5964
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
    in := self readStream.
10721
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1556
    out := CharacterWriteStream on:(self species uninitializedNew:self size).
5964
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
    [in atEnd] whileFalse:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1559
        c := in next.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1560
        c == $% ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1561
            c := in next.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1562
            out nextPut:c
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1563
        ] ifFalse:[c ~~ $< ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1564
            out nextPut:c.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1565
        ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1566
            peekc := in peek.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1567
            [peekc == $<] whileTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1568
                out nextPut:$<.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1569
                peekc := in nextPeek.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1570
            ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1571
            peekc == $n ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1572
                peekc := in nextPeek.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1573
                peekc == $> ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1574
                    in next.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1575
                    out cr.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1576
                ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1577
                    out nextPutAll:'<n'.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1578
                ]
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1579
            ] ifFalse:[peekc == $t ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1580
                peekc := in nextPeek.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1581
                peekc == $> ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1582
                    in next.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1583
                    out tab.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1584
                ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1585
                    out nextPutAll:'<t'.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1586
                ]
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1587
            ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1588
                peekc isDigit ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1589
                    "start an argument expansion ..."
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1590
                    nr := Integer readFrom:in onError:nil.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1591
                    nr isNil ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1592
                        "this cannot happen (there is at least one digit)"
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1593
                        self error:'invalid format' mayProceed:true.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1594
                        ^ self
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1595
                    ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1596
                    fmt := in next.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1597
                    (fmt ~~ $? and:[in peek ~~ $>]) ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1598
                        out nextPut:$<.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1599
                        nr printOn:out.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1600
                        out nextPut:fmt.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1601
                    ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1602
                        (nr between:1 and:argArray size) ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1603
                            arg := argArray at:nr.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1604
                        ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1605
                            arg := ''
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1606
                        ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1607
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1608
                        fmt == $p ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1609
                            "expand with args printString"
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1610
                            arg printOn:out.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1611
                        ] ifFalse:[fmt == $s ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1612
                            "expand with arg itself"
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1613
                            arg isText ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1614
                                out contentsSpecies isText ifFalse:[
18269
77a84c6693c8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18194
diff changeset
  1615
                                    out := (TextStream ? CharacterWriteStream on:Text new) nextPutAll:out contents; yourself.
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1616
                                ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1617
                                out nextPutAll:arg.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1618
                            ] ifFalse:[
16473
91d81c18c2ad class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 16452
diff changeset
  1619
                                out nextPutAll:arg asString string.  "see method comment: arg must know #asString"
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1620
                            ]
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1621
                        ] ifFalse:[fmt == $? ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1622
                            s1 := in upTo:$:.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1623
                            s2 := in nextUpTo:$>.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1624
                            arg == true ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1625
                                out nextPutAll:s1
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1626
                            ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1627
                                out nextPutAll:s2
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1628
                            ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1629
                        ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1630
                            "what does VW do here ?"
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1631
                            self error:'invalid format' mayProceed:true.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1632
                            ^ self
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1633
                        ]]].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1634
                        c := in next.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1635
                        c ~~ $> ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1636
                            "what does VW do here ?"
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1637
                            self error:'invalid format' mayProceed:true.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1638
                            ^ self
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1639
                        ]
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1640
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1641
                    ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1642
                ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1643
                    out nextPut:$<.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1644
                ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1645
            ]].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1646
        ]].
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1647
    ].
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1648
    ^ out contents
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1649
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1650
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1651
     'hello <1s> how are you' expandMacrosWith:(OperatingSystem getLoginName)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1652
     'one plus one is <1p>' expandMacrosWith:2
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1653
    "
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1654
10721
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1655
    "Modified: / 18-09-2007 / 22:50:43 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1656
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1657
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1658
isCharacters
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1659
    "added for visual works compatibility"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1660
    ^ true
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1661
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1662
16295
54510929f67c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16245
diff changeset
  1663
!CharacterArray methodsFor:'JavaScript support'!
54510929f67c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16245
diff changeset
  1664
54510929f67c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16245
diff changeset
  1665
unquote
17000
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  1666
    "removes double quotes from the receiver.
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  1667
     This is the JavaSccript standard unquote function."
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  1668
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  1669
    |mySize|
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  1670
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  1671
    (mySize := self size) >= 2 ifTrue:[
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  1672
        ((self first == $") and:[self last == $"]) ifTrue:[
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  1673
            ^ self copyFrom:2 to:mySize-1
16295
54510929f67c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16245
diff changeset
  1674
        ].
54510929f67c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16245
diff changeset
  1675
    ].
54510929f67c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16245
diff changeset
  1676
    ^ self
54510929f67c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16245
diff changeset
  1677
54510929f67c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16245
diff changeset
  1678
    "
17000
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  1679
     'hello' quote unquote
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  1680
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  1681
     JavaScriptParser evaluate:'''hello''.quote.unquote' 
16295
54510929f67c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16245
diff changeset
  1682
    "
54510929f67c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16245
diff changeset
  1683
! !
13510
150d12670b9f comment/format
Claus Gittinger <cg@exept.de>
parents: 13504
diff changeset
  1684
16175
05de577feb25 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16051
diff changeset
  1685
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1686
!CharacterArray methodsFor:'character searching'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1687
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1688
includesMatchCharacters
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  1689
    "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
  1690
     for match operations; false if not.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1691
     Here, do not care for $\ escapes"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1692
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1693
    ^ self includesAny:'*#['
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1694
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1695
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1696
     '*foo' includesMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1697
     '\*foo' includesMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1698
     '\*foo' includesUnescapedMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1699
     '*foo' includesMatchCharacters
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1700
     '\\*foo' includesMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1701
     'foo*' includesMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1702
     'foo\*' includesMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1703
     'foo\' includesMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1704
    "
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1705
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1706
    "Modified: 2.4.1997 / 18:12:34 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1707
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1708
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1709
includesSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1710
    "return true, if the receiver contains any whitespace characters"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1711
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1712
    ^ (self indexOfSeparator ~~ 0)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1713
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1714
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1715
     'hello world' includesSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1716
     'helloworld' includesSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1717
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1718
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1719
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1720
includesUnescapedMatchCharacters
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1721
    "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
  1722
     for match operations; false if not.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1723
     Here, care for $\ escapes"
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1724
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  1725
    |idx sz specialChars escape|
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1726
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1727
    idx := 1.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1728
    sz := self size.
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  1729
    specialChars := '*#[\'.
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  1730
    (escape := self class matchEscapeCharacter) ~~ $\ ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1731
        specialChars := specialChars copy.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1732
        specialChars at:specialChars size put:escape
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  1733
    ].
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  1734
16245
d16f9c7d9428 [true] whileTrue: -> #loop
Stefan Vogel <sv@exept.de>
parents: 16212
diff changeset
  1735
    [
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1736
        idx := self indexOfAny:specialChars startingAt:idx.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1737
        idx == 0 ifTrue:[^ false].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1738
        (self at:idx) == escape ifFalse:[^ true].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1739
        idx := idx + 2.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1740
        idx > sz ifTrue:[^ false].
16245
d16f9c7d9428 [true] whileTrue: -> #loop
Stefan Vogel <sv@exept.de>
parents: 16212
diff changeset
  1741
    ] loop.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1742
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1743
    "
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1744
     '*foo' includesUnescapedMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1745
     '\*foo' includesUnescapedMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1746
     '\\foo' includesUnescapedMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1747
     '\\\$foo' includesUnescapedMatchCharacters
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1748
     '*foo' includesUnescapedMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1749
     '\\*foo' includesUnescapedMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1750
     'foo*' includesUnescapedMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1751
     'foo\*' includesUnescapedMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1752
     'foo\' includesUnescapedMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1753
    "
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1754
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1755
    "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
  1756
    "Created: 2.4.1997 / 17:23:26 / cg"
9192
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
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1759
indexOfControlCharacterStartingAt:startIndex
3668
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1760
    "return the index of the next control character;
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1761
     that is a character with asciiValue < 32.
15605
99acf495a3cf class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15540
diff changeset
  1762
     Start the search at startIndex, searching forward.
3668
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1763
     Return 0 if none is found."
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1764
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1765
    |start  "{ Class: SmallInteger }"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1766
     mySize "{ Class: SmallInteger }"|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1767
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1768
    start := startIndex.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1769
    mySize := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1770
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1771
    start to:mySize do:[:index |
15605
99acf495a3cf class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15540
diff changeset
  1772
        (self at:index) isControlCharacter ifTrue:[^ index]
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1773
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1774
    ^ 0
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1775
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1776
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1777
     'hello world' asTwoByteString            indexOfControlCharacterStartingAt:1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1778
     'hello world\foo' withCRsasTwoByteString indexOfControlCharacterStartingAt:1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1779
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1780
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1781
    "Modified: / 21.7.1998 / 17:25:07 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1782
!
3668
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1783
8541
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1784
indexOfNonSeparator
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1785
    "return the index of the first non-whitespace character.
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1786
     return 0 if no non-separator was found"
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1787
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1788
    ^ self indexOfNonSeparatorStartingAt:1.
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1789
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1790
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1791
     '    hello world' indexOfNonSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1792
     '    ' indexOfNonSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1793
     'a   ' indexOfNonSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1794
     'abc' indexOfNonSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1795
     ' ' indexOfNonSeparator
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1796
     '' indexOfNonSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1797
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1798
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1799
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1800
indexOfNonSeparatorStartingAt:startIndex
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1801
    "return the index of the next non-whitespace character,
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1802
     starting the search at startIndex, searching forward;
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1803
     return 0 if no non-separator was found"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1804
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1805
    |start  "{ Class: SmallInteger }"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1806
     mySize "{ Class: SmallInteger }"|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1807
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1808
    start := startIndex.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1809
    mySize := self size.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1810
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1811
    start to:mySize do:[:index |
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1812
        (self at:index) isSeparator ifFalse:[^ index]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1813
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1814
    ^ 0
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1815
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1816
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1817
     '    hello world' indexOfNonSeparatorStartingAt:1
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1818
     '    ' indexOfNonSeparatorStartingAt:1
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1819
     'a   ' indexOfNonSeparatorStartingAt:2
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1820
    "
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1821
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1822
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1823
     |s index1 index2|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1824
     s := '   foo    bar      baz'.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1825
     index1 := s indexOfNonSeparatorStartingAt:1.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1826
     index2 := s indexOfSeparatorStartingAt:index1.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1827
     s copyFrom:index1 to:index2 - 1
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1828
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1829
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1830
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1831
indexOfSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1832
    "return the index of the first whitespace character;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1833
     starting the search at the beginning, searching forward;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1834
     return 0 if no separator was found"
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
    ^ self indexOfSeparatorStartingAt:1
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
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1839
     'hello world' indexOfSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1840
     'helloworld' indexOfSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1841
     'hello   ' indexOfSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1842
     '   hello' indexOfSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1843
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1844
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1845
15912
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1846
indexOfSeparatorOrEndStartingAt:startIndex
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1847
    "return the index of the next whitespace character,
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1848
     starting the search at startIndex, searching forward;
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1849
     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
  1850
     To extract the word, copy from startIndex to the returned index-1"
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1851
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1852
    |idx|
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1853
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1854
    idx := self indexOfSeparatorStartingAt:startIndex.
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1855
    idx == 0 ifTrue:[^ self size + 1].
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1856
    ^ idx.
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1857
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1858
    "
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1859
     'hello world' indexOfSeparatorOrEndStartingAt:3    
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1860
     ' hello world' indexOfSeparatorOrEndStartingAt:3
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1861
     'hello world ' indexOfSeparatorOrEndStartingAt:3
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1862
     'hello world ' indexOfSeparatorOrEndStartingAt:6
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1863
     'hello world ' indexOfSeparatorOrEndStartingAt:7
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1864
     'helloworld ' indexOfSeparatorOrEndStartingAt:7    
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1865
     'helloworld' indexOfSeparatorOrEndStartingAt:7
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1866
    "
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1867
!
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1868
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1869
indexOfSeparatorStartingAt:startIndex
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1870
    "return the index of the next whitespace character,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1871
     starting the search at startIndex, 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
    |start  "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1875
     mySize "{ Class: SmallInteger }"|
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
    start := startIndex.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1878
    mySize := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1879
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1880
    start to:mySize do:[:index |
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1881
        (self at:index) isSeparator ifTrue:[^ index]
9192
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
    ^ 0
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1884
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1885
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1886
     'hello world' indexOfSeparatorStartingAt:3
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1887
     ' hello world' indexOfSeparatorStartingAt:3
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1888
     'hello world ' indexOfSeparatorStartingAt:3
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1889
     'hello world ' indexOfSeparatorStartingAt:6
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1890
     'hello world ' indexOfSeparatorStartingAt:7
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1891
     'helloworld ' indexOfSeparatorStartingAt:7
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1892
     'helloworld' indexOfSeparatorStartingAt:7
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1893
    "
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1894
!
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1895
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1896
lastIndexOfSeparator
14150
e13160aa321a comment/format in: #lastIndexOfSeparator
Claus Gittinger <cg@exept.de>
parents: 14141
diff changeset
  1897
    "return the last index of a whitespace character (space or tab).
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1898
     (i.e. start the search at the end and search backwards);
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1899
     Returns 0 if no separator is found."
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1900
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1901
    ^ self lastIndexOfSeparatorStartingAt:(self size)
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1902
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1903
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1904
     'hello world' lastIndexOfSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1905
     'helloworld' lastIndexOfSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1906
     'hel lo wor ld' lastIndexOfSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1907
     'hel   ' lastIndexOfSeparator 6
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1908
    "
14150
e13160aa321a comment/format in: #lastIndexOfSeparator
Claus Gittinger <cg@exept.de>
parents: 14141
diff changeset
  1909
e13160aa321a comment/format in: #lastIndexOfSeparator
Claus Gittinger <cg@exept.de>
parents: 14141
diff changeset
  1910
    "Modified (comment): / 01-06-2012 / 13:10:30 / cg"
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1911
!
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1912
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1913
lastIndexOfSeparatorStartingAt:startIndex
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1914
    "return the index of the previous whitespace character,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1915
     starting the search at startIndex (and searching backwards);
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1916
     returns 0 if no separator was found"
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  "{ Class: SmallInteger }"|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1919
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1920
    start := startIndex.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1921
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1922
    start to:1 by:-1 do:[:index |
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1923
        (self at:index) isSeparator ifTrue:[^ index]
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1924
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1925
    ^ 0
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1926
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1927
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1928
     'hello world' lastIndexOfSeparatorStartingAt:3
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1929
     'hello world' lastIndexOfSeparatorStartingAt:7
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1930
     'helloworld' lastIndexOfSeparatorStartingAt:7
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1931
     ' helloworld' lastIndexOfSeparatorStartingAt:7
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1932
    "
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1933
! !
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1934
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1935
!CharacterArray methodsFor:'comparing'!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1936
6742
292775fda600 avoid endless recursion when comparing int < string
Claus Gittinger <cg@exept.de>
parents: 6655
diff changeset
  1937
< aString
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1938
    "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
  1939
     receiver is greater than the argument. Otherwise return false.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1940
     This comparison is based on the elements ascii code -
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1941
     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
  1942
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1943
    |mySize    "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1944
     otherSize "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1945
     n         "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1946
     c1 c2|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1947
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1948
    mySize := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1949
    otherSize := aString string size.
6742
292775fda600 avoid endless recursion when comparing int < string
Claus Gittinger <cg@exept.de>
parents: 6655
diff changeset
  1950
    n := mySize min:otherSize.
292775fda600 avoid endless recursion when comparing int < string
Claus Gittinger <cg@exept.de>
parents: 6655
diff changeset
  1951
292775fda600 avoid endless recursion when comparing int < string
Claus Gittinger <cg@exept.de>
parents: 6655
diff changeset
  1952
    1 to:n do:[:index |
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1953
        c1 := self at:index.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1954
        c2 := aString at:index.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1955
        (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
  1956
    ].
292775fda600 avoid endless recursion when comparing int < string
Claus Gittinger <cg@exept.de>
parents: 6655
diff changeset
  1957
    ^ mySize < otherSize
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1958
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1959
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1960
= aString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1961
    "Compare the receiver with the argument and return true if the
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1962
     receiver is equal to the argument. Otherwise return false.
1252
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  1963
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  1964
     This compare does NOT ignore case differences,
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1965
     therefore 'foo' = 'Foo' will return false.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1966
     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
  1967
14137
1eb1b4a3f364 Inherit from UninterpretedBytes instead of ByteArray
Stefan Vogel <sv@exept.de>
parents: 14122
diff changeset
  1968
    |mySize    "{ Class: SmallInteger }"|
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1969
5963
23462e06dcff compare with Texts fixed (should compare equal if strings are)
Claus Gittinger <cg@exept.de>
parents: 5946
diff changeset
  1970
    (aString isString or:[aString species == self species]) ifFalse:[
14137
1eb1b4a3f364 Inherit from UninterpretedBytes instead of ByteArray
Stefan Vogel <sv@exept.de>
parents: 14122
diff changeset
  1971
        ^ false
5963
23462e06dcff compare with Texts fixed (should compare equal if strings are)
Claus Gittinger <cg@exept.de>
parents: 5946
diff changeset
  1972
    ].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1973
    mySize := self size.
14137
1eb1b4a3f364 Inherit from UninterpretedBytes instead of ByteArray
Stefan Vogel <sv@exept.de>
parents: 14122
diff changeset
  1974
    mySize ~~ (aString size) ifTrue:[^ false].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1975
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1976
    1 to:mySize do:[:index |
14137
1eb1b4a3f364 Inherit from UninterpretedBytes instead of ByteArray
Stefan Vogel <sv@exept.de>
parents: 14122
diff changeset
  1977
        (self at:index) = (aString at:index) ifFalse:[^ false].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1978
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1979
    ^ true
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1980
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1981
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1982
     'foo' = 'Foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1983
     'foo' = 'bar'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1984
     'foo' = 'foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1985
     'foo' = 'foo' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1986
     'foo' asText = 'foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1987
     'foo' asText = 'foo' asText
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1988
    "
1252
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  1989
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  1990
    "Modified: 22.4.1996 / 15:53:58 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1991
!
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1992
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  1993
> aString
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1994
    "Compare the receiver with the argument and return true if the
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1995
     receiver is greater than the argument. Otherwise return false.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1996
     This comparison is based on the elements ascii code -
1252
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  1997
     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
  1998
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1999
    |mySize    "{ Class: SmallInteger }"
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2000
     otherSize "{ Class: SmallInteger }"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2001
     n         "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2002
     c1 c2|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2003
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2004
    mySize := self size.
5929
a3d2e7aaa3a3 added #compareCaselessWith:
Claus Gittinger <cg@exept.de>
parents: 5898
diff changeset
  2005
    otherSize := aString string size.
a3d2e7aaa3a3 added #compareCaselessWith:
Claus Gittinger <cg@exept.de>
parents: 5898
diff changeset
  2006
    n := mySize min:otherSize.
a3d2e7aaa3a3 added #compareCaselessWith:
Claus Gittinger <cg@exept.de>
parents: 5898
diff changeset
  2007
a3d2e7aaa3a3 added #compareCaselessWith:
Claus Gittinger <cg@exept.de>
parents: 5898
diff changeset
  2008
    1 to:n do:[:index |
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2009
        c1 := self at:index.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2010
        c2 := aString at:index.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2011
        (c1 == c2 or:[c1 = c2]) ifFalse:[^ c1 > c2].
5929
a3d2e7aaa3a3 added #compareCaselessWith:
Claus Gittinger <cg@exept.de>
parents: 5898
diff changeset
  2012
    ].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2013
    ^ mySize > otherSize
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2014
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2015
    "Modified: 22.4.1996 / 15:55:00 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2016
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2017
14660
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2018
after:aString
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2019
    "Compare the receiver with the argument and return true if the
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2020
     receiver should come after the argument in a sorted list.
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2021
     Otherwise return false.
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2022
     NOTE: The comparison should be language specific, depending on the value of
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2023
            LC_COLLATE, which is initialized from the environment.
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2024
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2025
            Currently it is for Strings, but not for UnicodeStrings...
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2026
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2027
     STUPID:
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2028
        #after has a completely different meaning in SeqColl ..."
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2029
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2030
    ^ (self compareCollatingWith:aString) > 0
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2031
!
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2032
15814
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2033
compareAsVersionNumberWith:aStringOrCollection
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2034
    "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
  2035
     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
  2036
     Compare as version numbers in the form a.b.c... ."
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2037
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2038
    |rev1 rev2|
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2039
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2040
    rev1 := self asCollectionOfSubstringsSeparatedBy:$..
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2041
    aStringOrCollection isString ifTrue:[
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2042
        rev2 := aStringOrCollection asCollectionOfSubstringsSeparatedBy:$..
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2043
    ].
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2044
    rev1 := rev1 collect:[:each| each asInteger].
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2045
    rev2 := rev2 collect:[:each| each asInteger].
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2046
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2047
    ^ rev1 compareWith:rev2
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2048
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2049
   "
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2050
     self assert:('1' compareAsVersionNumberWith:'2') < 0.      
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2051
     self assert:('2' compareAsVersionNumberWith:'1') > 0.      
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2052
     self assert:('1.1' compareAsVersionNumberWith:'2.1.2') < 0.      
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2053
     self assert:('2.1' compareAsVersionNumberWith:'1.2.3') > 0.      
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2054
     self assert:('1' compareAsVersionNumberWith:'1.1') < 0.      
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2055
     self assert:('1.1' compareAsVersionNumberWith:'1') > 0.      
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2056
     self assert:('1.1' compareAsVersionNumberWith:'1.2') < 0.      
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2057
     self assert:('1.10' compareAsVersionNumberWith:'1.2') > 0.      
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2058
     self assert:('1.2.3.4' compareAsVersionNumberWith:'1.2.3.5') < 0.      
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2059
     self assert:('1.2.3.4' compareAsVersionNumberWith:'1.2.3.3') > 0.      
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2060
     self assert:('1.2.3.4' compareAsVersionNumberWith:'1.2.3') > 0.      
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2061
     self assert:('1.2.3.4' compareAsVersionNumberWith:'1.2.3.4') = 0.      
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2062
     self assert:('1.2.3.4' compareAsVersionNumberWith:'01.002.03.004') = 0.      
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2063
     self assert:('1.2.3.4' compareAsVersionNumberWith:#(1 2 3 4)) = 0.      
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2064
    "
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2065
!
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2066
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2067
compareCaselessWith:aString
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2068
    "Compare the receiver against the argument, ignoreing case.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2069
     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
  2070
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2071
     This comparison is based on the elements ascii code -
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2072
     i.e. national characters are NOT treated specially.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2073
     'foo' compareWith: 'Foo' will return 0"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2074
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2075
    |mySize    "{ Class: SmallInteger }"
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2076
     otherSize "{ Class: SmallInteger }"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2077
     n         "{ Class: SmallInteger }"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2078
     c1 c2|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2079
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2080
    mySize := self size.
5739
4fd3be7ccc75 oops some relational ops did accept a non-string arg
Claus Gittinger <cg@exept.de>
parents: 5732
diff changeset
  2081
    otherSize := aString string size.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2082
    n := mySize min:otherSize.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2083
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2084
    1 to:n do:[:index |
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2085
        c1 := (self at:index) asLowercase.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2086
        c2 := (aString at:index) asLowercase.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2087
        c1 > c2 ifTrue:[^ 1].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2088
        c1 < c2 ifTrue:[^ -1].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2089
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2090
    mySize > otherSize ifTrue:[^ 1].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2091
    mySize < otherSize ifTrue:[^ -1].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2092
    ^ 0
1252
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  2093
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  2094
    "Modified: 22.4.1996 / 15:56:07 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2095
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2096
14660
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2097
compareCollatingWith:aString
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2098
    "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
  2099
     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
  2100
     The comparison is language specific, depending on the value of
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2101
     LC_COLLATE, which is in the shell environment."
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2102
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2103
    "TODO not yet defined for unicode"
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2104
    <resource: #todo>
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2105
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2106
    |s|
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2107
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2108
    (s := self string) ~~ self ifTrue:[
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2109
        ^ s compareCollatingWith:aString
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2110
    ].
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2111
    ^ self compareWith:aString
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2112
!
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2113
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2114
compareWith:aString
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2115
    "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
  2116
     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
  2117
     This comparison is based on the elements' codepoints -
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2118
     i.e. upper/lowercase & national characters are NOT treated specially.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2119
     'foo' compareWith: 'Foo' will return 1.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2120
     while 'foo' sameAs:'Foo' will return true"
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2121
15814
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2122
    |s|
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2123
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2124
    s := self string.
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2125
    s ~~ self ifTrue:[
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2126
        ^ s compareWith:aString string.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2127
    ].
15814
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2128
    ^ super compareWith:aString string.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2129
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2130
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2131
endsWith:aStringOrCharacter
16175
05de577feb25 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16051
diff changeset
  2132
    "return true, if the receiver ends with something, aStringOrCharacter.
05de577feb25 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16051
diff changeset
  2133
     If aStringOrCharacter is empty, true is returned"
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2134
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2135
    |s|
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2136
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2137
    (s := self string) ~~ self ifTrue:[
16175
05de577feb25 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16051
diff changeset
  2138
        ^ s endsWith:aStringOrCharacter
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2139
    ].
12912
d12e31b830f5 changed: #endsWith:
Claus Gittinger <cg@exept.de>
parents: 12767
diff changeset
  2140
    (self notEmpty and:[aStringOrCharacter isCharacter]) ifTrue:[
16175
05de577feb25 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16051
diff changeset
  2141
        ^ self last = aStringOrCharacter
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2142
    ].
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2143
    ^ super endsWith:aStringOrCharacter
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2144
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2145
    "
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2146
     'hello world' endsWith:'world'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2147
     'hello world' asText allBold endsWith:'world'
16175
05de577feb25 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16051
diff changeset
  2148
     'hello world' endsWith:''               
05de577feb25 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16051
diff changeset
  2149
     'hello world' asText allBold endsWith:''
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2150
    "
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2151
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2152
    "Modified: 12.5.1996 / 15:49:18 / cg"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2153
!
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2154
11838
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  2155
hammingDistanceTo:aString
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  2156
    "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
  2157
     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
  2158
     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
  2159
     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
  2160
     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
  2161
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  2162
    self assert:(aString size == self size).
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  2163
    ^ 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
  2164
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  2165
    "
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  2166
     'roses' hammingDistanceTo:'toned'
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  2167
    "
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  2168
!
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  2169
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2170
hash
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2171
    "return an integer useful as a hash-key"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2172
16898
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2173
    "/ whenever changing, also care for String>>hash.
13879
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2174
    "/ immediately after any change, execute (maybe in a debugger):
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2175
    "/      Set allSubInstancesDo:[:s | s rehash]
16898
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2176
    ^ self hash_fnv1a
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2177
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2178
    "
16899
c8de03aacca0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16898
diff changeset
  2179
     'a' hash                    
c8de03aacca0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16898
diff changeset
  2180
     'a' asUnicode16String hash  
c8de03aacca0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16898
diff changeset
  2181
     'a' asUnicode32String hash  
c8de03aacca0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16898
diff changeset
  2182
     'aa' hash                   
c8de03aacca0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16898
diff changeset
  2183
     'aa' asUnicode16String hash 
c8de03aacca0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16898
diff changeset
  2184
     'aa' asUnicode32String hash 
c8de03aacca0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16898
diff changeset
  2185
     'ab' hash                   
c8de03aacca0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16898
diff changeset
  2186
     'ab' asUnicode16String hash 
c8de03aacca0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16898
diff changeset
  2187
     'ab' asUnicode32String hash 
13879
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2188
     'ab' hash
16899
c8de03aacca0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16898
diff changeset
  2189
     'ab' asArray hash           
13879
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2190
    "
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2191
14641
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2192
    "
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2193
        |syms ms|
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2194
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2195
        syms := Symbol allInstances.
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2196
        Transcript show:'syms: '; showCR:syms size.
14652
3da893944c41 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14641
diff changeset
  2197
        Transcript show:'sdbm hashes: '; showCR:(syms collect:[:s| s hash]) asSet size.
14641
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2198
        Transcript show:'dragonBook hashes: '; showCR:(syms collect:[:s| s hash_dragonBook]) asSet size.
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2199
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2200
        ms := Time millisecondsToRun:[
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2201
            10 timesRepeat:[
14652
3da893944c41 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14641
diff changeset
  2202
                syms do:[:each| each hash].
14641
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2203
            ].
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2204
        ].
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2205
        Transcript show:'sdbm hash: '; showCR:ms.
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2206
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2207
        ms := Time millisecondsToRun:[
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2208
            10 timesRepeat:[
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2209
                syms do:[:each| each hash_dragonBook].
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2210
            ].
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2211
        ].
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2212
        Transcript show:'dragonBook: '; showCR:ms.
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2213
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2214
        syms := syms collect:[:each| each asUnicode16String].
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2215
        ms := Time millisecondsToRun:[
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2216
            10 timesRepeat:[
14652
3da893944c41 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14641
diff changeset
  2217
                syms do:[:each| each hash].
14641
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2218
            ].
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2219
        ].
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2220
        Transcript show:'unicode sdbm hash: '; showCR:ms.
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2221
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2222
        ms := Time millisecondsToRun:[
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2223
            10 timesRepeat:[
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2224
                syms do:[:each| each hash_dragonBook].
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2225
            ].
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2226
        ].
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2227
        Transcript show:'unicode dragonBook:'; showCR:ms.
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2228
    "
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2229
13879
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2230
    "Modified: / 26-12-2011 / 14:09:07 / cg"
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2231
!
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2232
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2233
hash_dragonBook
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2234
    "return an integer useful as a hash-key"
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2235
10698
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2236
    |h g|
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2237
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2238
    "/
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2239
    "/ this is the dragon-book algorithm
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2240
    "/
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2241
    h := 0.
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2242
    self reverseDo:[:char |
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2243
"/ 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
  2244
"/        h := (h bitShift:4) + char asciiValue.
14137
1eb1b4a3f364 Inherit from UninterpretedBytes instead of ByteArray
Stefan Vogel <sv@exept.de>
parents: 14122
diff changeset
  2245
        h := (h bitShift:4).
14637
9ba33c37bdd6 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14631
diff changeset
  2246
        h := h + char codePoint.
14137
1eb1b4a3f364 Inherit from UninterpretedBytes instead of ByteArray
Stefan Vogel <sv@exept.de>
parents: 14122
diff changeset
  2247
        h := h bitAnd:16rFFFFFFFF.
1eb1b4a3f364 Inherit from UninterpretedBytes instead of ByteArray
Stefan Vogel <sv@exept.de>
parents: 14122
diff changeset
  2248
        g := (h bitAnd: 16rF0000000).
1eb1b4a3f364 Inherit from UninterpretedBytes instead of ByteArray
Stefan Vogel <sv@exept.de>
parents: 14122
diff changeset
  2249
        g ~~ 0 ifTrue:[
1eb1b4a3f364 Inherit from UninterpretedBytes instead of ByteArray
Stefan Vogel <sv@exept.de>
parents: 14122
diff changeset
  2250
            h := h bitXor:(g bitShift:-24).
1eb1b4a3f364 Inherit from UninterpretedBytes instead of ByteArray
Stefan Vogel <sv@exept.de>
parents: 14122
diff changeset
  2251
            h := h bitXor:g.
1eb1b4a3f364 Inherit from UninterpretedBytes instead of ByteArray
Stefan Vogel <sv@exept.de>
parents: 14122
diff changeset
  2252
        ].
10698
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2253
    ].
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2254
    "/
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2255
    "/ multiply by large prime to spread values
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2256
    "/ This speeds up Set and Dictionary by a factor of 10!!
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2257
    "/
14137
1eb1b4a3f364 Inherit from UninterpretedBytes instead of ByteArray
Stefan Vogel <sv@exept.de>
parents: 14122
diff changeset
  2258
    h := h times:31415821.
10698
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2259
    ^ h
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2260
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2261
    "
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2262
     'a' hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2263
     'a' asUnicode16String hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2264
     'aa' hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2265
     'aa' asUnicode16String hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2266
     'ab' hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2267
     'ab' asUnicode16String hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2268
     'ab' hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2269
     'ab' asArray hash
10698
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2270
    "
13879
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2271
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2272
    "Created: / 26-12-2011 / 13:46:06 / cg"
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2273
!
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2274
16887
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2275
hash_fnv1a
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2276
    "return an integer useful as a hash-key.
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2277
     This method uses the fnv-1a algorithm
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2278
     (which is actually a very good one)"
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2279
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2280
    |h|
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2281
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2282
    h := 2166136261.
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2283
    self do:[:eachChar |
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2284
        h := h bitXor:(eachChar codePoint).
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2285
        h := (h * 16777619) bitAnd:16rFFFFFFFF.
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2286
    ].
16898
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2287
    "/ make sure, it fits into a smallInt
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2288
    h := (h bitXor: (h >> 30)) bitAnd: 16r3FFFFFFF.
16887
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2289
    ^ h
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2290
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2291
    "
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2292
     'abc' hash_fnv1a  
16898
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2293
     'abc' asUnicode16String hash_fnv1a  
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2294
     'abc' asUnicode32String hash_fnv1a 
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2295
16887
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2296
     'foofooHelloWorld' hash_fnv1a   
16898
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2297
     'foofooHelloWorld' asUnicode16String hash_fnv1a   
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2298
     'foofooHelloWorld' asUnicode32String hash_fnv1a   
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2299
16887
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2300
     'blablaHelloWorld' hash_fnv1a   
16898
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2301
     'blablaHelloWorld' asUnicode16String hash_fnv1a   
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2302
     'blablaHelloWorld' asUnicode32String hash_fnv1a   
16887
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2303
    "
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2304
!
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2305
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2306
hash_java
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2307
    "return an integer useful as a hash-key.
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2308
     This method uses the same algorithm as used in
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2309
     the java virtual machine 
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2310
     (which is actually not a very good one)."
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2311
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2312
    |h|
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2313
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2314
    h := 0.
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2315
    self do:[:eachChar |
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2316
        h := (h * 31) + (eachChar codePoint).
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2317
        h := h bitAnd:16rFFFFFFFF.
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2318
    ].
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2319
    ^ h
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2320
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2321
    "
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2322
     'abc' hash_java  
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2323
     'foofooHelloWorld' hash_java   
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2324
     'blablaHelloWorld' hash_java   
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2325
    "
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2326
!
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2327
16898
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2328
hash_sdbm
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2329
    "return an integer useful as a hash-key.
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2330
     This method implements the sdbm algorithm."
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2331
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2332
    |h|
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2333
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2334
    "/
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2335
    "/ this is the sdbm algorithm
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2336
    "/
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2337
    h := 0.
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2338
    self do:[:char |
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2339
        h := (65599 times:h) plus:char codePoint.
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2340
    ].
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2341
    ^ h 
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2342
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2343
    "
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2344
     'a' hash
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2345
     'a' asUnicode16String hash
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2346
     'aa' hash
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2347
     'aa' asUnicode16String hash
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2348
     'ab' hash
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2349
     'ab' asUnicode16String hash
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2350
     'ab' hash
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2351
     'ab' asArray hash
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2352
    "
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2353
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2354
    "
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2355
        |syms ms|
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2356
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2357
        syms := Symbol allInstances.
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2358
        Transcript show:'syms: '; showCR:syms size.
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2359
        Transcript show:'sdbm hashes: '; showCR:(syms collect:[:s| s hash]) asSet size.
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2360
        Transcript show:'dragonBook hashes: '; showCR:(syms collect:[:s| s hash_dragonBook]) asSet size.
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2361
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2362
        ms := Time millisecondsToRun:[
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2363
            10 timesRepeat:[
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2364
                syms do:[:each| each hash].
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2365
            ].
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2366
        ].
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2367
        Transcript show:'sdbm hash: '; showCR:ms.
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2368
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2369
        ms := Time millisecondsToRun:[
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2370
            10 timesRepeat:[
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2371
                syms do:[:each| each hash_dragonBook].
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
        ].
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2374
        Transcript show:'dragonBook: '; showCR:ms.
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2375
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2376
        syms := syms collect:[:each| each asUnicode16String].
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2377
        ms := Time millisecondsToRun:[
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2378
            10 timesRepeat:[
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2379
                syms do:[:each| each hash].
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
        Transcript show:'unicode sdbm hash: '; showCR:ms.
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2383
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2384
        ms := Time millisecondsToRun:[
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2385
            10 timesRepeat:[
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2386
                syms do:[:each| each hash_dragonBook].
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2387
            ].
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2388
        ].
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2389
        Transcript show:'unicode dragonBook:'; showCR:ms.
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
    "Modified: / 26-12-2011 / 14:09:07 / cg"
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2393
!
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2394
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2395
levenshteinTo:aString
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2396
    "return the levenshtein distance to the argument, aString;
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2397
     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
  2398
     made to get aString from the receiver.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2399
     See IEEE transactions on Computers 1976 Pg 172 ff."
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2400
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2401
    "
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2402
     in the following, we assume that ommiting a character
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2403
     is less of an error than inserting an extra character.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2404
     Therefore the different insertion (i) and deletion (d) values.
15750
2df87ab00226 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15740
diff changeset
  2405
        s: substitution weight (4)
2df87ab00226 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15740
diff changeset
  2406
        k: keyboard weight (k) (typing a nearby key) - or nil (then use s)
2df87ab00226 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15740
diff changeset
  2407
        c: case weight (4)                           - or nil (then use s)
2df87ab00226 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15740
diff changeset
  2408
        e: exchange weight (8)                       - or nil (then use s*2)
2df87ab00226 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15740
diff changeset
  2409
        i: insertion of extra character weight (2)
2df87ab00226 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15740
diff changeset
  2410
        d: delete of a character weight (6)
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2411
    "
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2412
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2413
    ^ StringUtilities
15750
2df87ab00226 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15740
diff changeset
  2414
            levenshteinDistanceFrom:self
2df87ab00226 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15740
diff changeset
  2415
            to:aString
2df87ab00226 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15740
diff changeset
  2416
            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
  2417
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2418
    "
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2419
     'computer' levenshteinTo:'computer'
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2420
     'cOmputer' levenshteinTo:'computer'
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2421
     'cOmpuTer' levenshteinTo:'computer'
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2422
     'cimputer' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2423
     'cumputer' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2424
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2425
     'cmputer' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2426
     'coomputer' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2427
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2428
     'ocmprt' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2429
     'computer' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2430
     'ocmputer' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2431
     'cmputer' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2432
     'computer' levenshteinTo:'cmputer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2433
     'Computer' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2434
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2435
     'compiter' levenshteinTo:'computer'
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2436
     'compoter' levenshteinTo:'computer'
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2437
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2438
     'comptuer' levenshteinTo:'computer'
11861
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
!
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2441
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2442
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
  2443
    "parametrized levenshtein.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2444
     return the levenshtein distance to the argument, aString;
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2445
     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
  2446
     made to get aString from the receiver.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2447
     The arguments are the costs for
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2448
        s:substitution,
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2449
        k:keyboard type (substitution),
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2450
        c:case-change,
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2451
        i:insertion
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2452
        d:deletion
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2453
     of a character.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2454
     See IEEE transactions on Computers 1976 Pg 172 ff"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2455
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2456
    ^ StringUtilities
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2457
            levenshteinDistanceFrom:self
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2458
            to:aString
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2459
            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
  2460
!
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2461
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2462
sameAs:aString
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2463
    "Compare the receiver with the argument like =, but ignore case differences.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2464
     Return true or false."
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2465
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2466
    |mySize "{ Class: SmallInteger }"
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2467
     otherSize c1 c2|
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2468
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2469
    self == aString ifTrue:[^ true].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2470
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2471
    mySize := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2472
    otherSize := aString string size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2473
    mySize == otherSize ifFalse:[^ false].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2474
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2475
    1 to:mySize do:[:index |
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2476
        c1 := self at:index.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2477
        c2 := aString at:index.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2478
        c1 == c2 ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2479
            (c1 sameAs:c2) ifFalse:[^ false].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2480
        ]
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2481
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2482
    ^ true
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2483
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2484
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2485
     'foo' sameAs: 'Foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2486
     'foo' sameAs: 'bar'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2487
     'foo' sameAs: 'foo'
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2488
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2489
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2490
    "Modified: 22.4.1996 / 15:56:17 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2491
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2492
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2493
sameAs:aString caseSensitive:caseSensitive
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2494
    "Compare the receiver with the argument.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2495
     If caseSensitive is false, this is the same as #sameAs:,
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2496
     if false, this is the same as #=."
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2497
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2498
    caseSensitive ifFalse:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2499
        ^ self sameAs:aString
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2500
    ].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2501
    ^ self = aString
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2502
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2503
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2504
     'foo' sameAs:'Foo' caseSensitive:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2505
     'foo' sameAs:'foo' caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2506
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2507
!
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2508
5242
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2509
sameAs:aString ignoreCase:ignoreCase
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2510
    <resource: #obsolete>
5242
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2511
    "Compare the receiver with the argument.
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2512
     If ignoreCase is true, this is the same as #sameAs:,
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2513
     if false, this is the same as #=."
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2514
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2515
    ignoreCase ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2516
        ^ self sameAs:aString
5242
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2517
    ].
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2518
    ^ self = aString
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2519
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2520
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2521
     'foo' sameAs:'Foo' ignoreCase:false
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2522
     'foo' sameAs:'foo' ignoreCase:true
5242
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2523
    "
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2524
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2525
!
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2526
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2527
sameCharacters:aString
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2528
    "count & return the number of characters which are the same
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2529
     (ignoring case and emphasis) in the receiver and the argument, aString."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2530
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2531
    |n "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2532
     c1 c2 cnt|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2533
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2534
    n := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2535
    n := n min:(aString string size).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2536
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2537
    cnt := 0.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2538
    1 to:n do:[:index |
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2539
        c1 := self at:index.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2540
        c2 := aString at:index.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2541
        ((c1 == c2)
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2542
        or:[c1 asLowercase = c2 asLowercase]) ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2543
            cnt := cnt + 1
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2544
        ]
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2545
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2546
    ^ cnt
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2547
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2548
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2549
     'foobarbaz' sameCharacters: 'foo'
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2550
     'foobarbaz' sameCharacters: 'Foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2551
     'foobarbaz' sameCharacters: 'baz'
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2552
    "
5510
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2553
!
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2554
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2555
sameEmphasisAs:aStringOrText
17215
0906efa5645d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17213
diff changeset
  2556
    "compare the receiver's and the argument's emphasis"
5510
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2557
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2558
    ^ self emphasis = aStringOrText emphasis
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2559
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2560
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2561
     'hello' asText sameEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2562
     'hello' asText sameEmphasisAs: 'hello' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2563
     'hello' asText allBold sameEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2564
     'hello' asText allBold sameEmphasisAs: 'fooba' asText allBold
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2565
     'hello' asText allBold sameEmphasisAs: 'fooba' asText allItalic
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2566
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2567
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2568
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  2569
sameStringAndEmphasisAs:aStringOrText
5739
4fd3be7ccc75 oops some relational ops did accept a non-string arg
Claus Gittinger <cg@exept.de>
parents: 5732
diff changeset
  2570
    "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
  2571
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2572
    aStringOrText isString ifFalse:[^ false].
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2573
    (self string = aStringOrText string) ifFalse:[^ false].
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2574
    self hasChangeOfEmphasis = aStringOrText hasChangeOfEmphasis ifFalse:[^ false].
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2575
    ^ self emphasis = aStringOrText emphasis
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2576
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2577
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2578
     'hello' asText sameEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2579
     'hello' asText sameEmphasisAs: 'hello' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2580
     'hello' asText allBold sameEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2581
     'hello' asText allBold sameEmphasisAs: 'fooba' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2582
     'hello' asText allBold sameEmphasisAs: 'fooba' asText allItalic
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2583
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2584
     'hello' sameEmphasisAs: 'hello' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2585
     'hello' sameEmphasisAs: 'hello' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2586
     'hello' sameEmphasisAs: 'fooba'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2587
     'hello' sameEmphasisAs: 'fooba' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2588
     'hello' sameEmphasisAs: 'fooba' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2589
     'hello' sameEmphasisAs: 'fooba' asText allItalic
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2590
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2591
     'hello' asText sameStringAndEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2592
     'hello' asText sameStringAndEmphasisAs: 'hello' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2593
     'hello' asText allBold sameStringAndEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2594
     'hello' asText allBold sameStringAndEmphasisAs: 'fooba' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2595
     'hello' asText allBold sameStringAndEmphasisAs: 'fooba' asText allItalic
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2596
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2597
     'hello' sameStringAndEmphasisAs: 'hello' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2598
     'hello' sameStringAndEmphasisAs: 'hello' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2599
     'hello' sameStringAndEmphasisAs: 'fooba'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2600
     'hello' sameStringAndEmphasisAs: 'fooba' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2601
     'hello' sameStringAndEmphasisAs: 'fooba' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2602
     'hello' sameStringAndEmphasisAs: 'fooba' asText allItalic
5510
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2603
    "
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2604
!
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2605
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2606
spellAgainst: aString
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2607
    "return an integer between 0 and 100 indicating how similar
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2608
     the argument is to the receiver.  No case conversion is done.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2609
     This algorithm is much simpler (but also less exact) than the
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2610
     levenshtein distance. Experiment which is better for your
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2611
     application."
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2612
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2613
    | i1     "{ Class: SmallInteger }"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2614
      i2     "{ Class: SmallInteger }"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2615
      next1  "{ Class: SmallInteger }"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2616
      next2  "{ Class: SmallInteger }"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2617
      size1  "{ Class: SmallInteger }"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2618
      size2  "{ Class: SmallInteger }"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2619
      score  "{ Class: SmallInteger }"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2620
      maxLen "{ Class: SmallInteger }" |
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2621
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2622
    size1 := self size.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2623
    size2 := aString size.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2624
    maxLen := size1 max:size2.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2625
    score := 0.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2626
    i1 := i2 := 1.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2627
    [i1 <= size1 and: [i2 <= size2]] whileTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2628
        next1 := i1 + 1.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2629
        next2 := i2 + 1.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2630
        (self at:i1) == (aString at:i2) ifTrue: [
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2631
            score := score+1.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2632
            i1 := next1.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2633
            i2 := next2
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2634
        ] ifFalse: [
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2635
            (i2 < size2 and: [(self at:i1) == (aString at:next2)]) ifTrue: [
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2636
                i2 := next2
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2637
            ] ifFalse: [
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2638
                (i1 < size1 and: [(self at:next1) == (aString at:i2)]) ifTrue: [
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2639
                    i1 := next1
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2640
                ] ifFalse: [
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2641
                    i1 := next1.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2642
                    i2 := next2
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2643
                ]
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2644
            ]
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2645
        ]
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2646
    ].
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2647
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2648
    score == maxLen ifTrue: [^ 100].
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2649
    ^ 100 * score // maxLen
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
    "
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2652
     'Smalltalk' spellAgainst: 'Smalltlak'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2653
     'Smalltalk' spellAgainst: 'smalltlak'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2654
     'Smalltalk' spellAgainst: 'smalltalk'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2655
     'Smalltalk' spellAgainst: 'smalltlk'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2656
     'Smalltalk' spellAgainst: 'Smalltolk'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2657
    "
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2658
!
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2659
16553
d2f7a990d66b class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16473
diff changeset
  2660
startsWith:aStringOrCharacter
d2f7a990d66b class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16473
diff changeset
  2661
    "return true, if the receiver starts with something, aStringOrCharacter.
17371
cbb00370b456 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17367
diff changeset
  2662
     If the argument is empty, true is returned.
cbb00370b456 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17367
diff changeset
  2663
     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
  2664
     which are both inconsistent w.r.t. an empty argument."
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2665
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2666
    |s|
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2667
16553
d2f7a990d66b class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16473
diff changeset
  2668
    aStringOrCharacter isCharacter ifTrue:[
d2f7a990d66b class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16473
diff changeset
  2669
        ^ (self size > 0) and:[ (self at:1) == aStringOrCharacter ]
d2f7a990d66b class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16473
diff changeset
  2670
    ].
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2671
    (s := self string) ~~ self ifTrue:[
16553
d2f7a990d66b class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16473
diff changeset
  2672
        ^ s startsWith:aStringOrCharacter
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2673
    ].
16553
d2f7a990d66b class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16473
diff changeset
  2674
    ^ super startsWith:aStringOrCharacter
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2675
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2676
    "
17364
62b006f570cb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17241
diff changeset
  2677
     'abcde' startsWith:#($a $b $c)
62b006f570cb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17241
diff changeset
  2678
     'abcde' startsWith:'abc'
62b006f570cb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17241
diff changeset
  2679
     'abcd' startsWith:'abcde'
62b006f570cb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17241
diff changeset
  2680
     'abcde' startsWith:'abd'
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2681
     'hello world' startsWith:'hello'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2682
     'hello world' asText allBold startsWith:'hello'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2683
     'hello world' asText allBold startsWith:''
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
    "Created: 12.5.1996 / 15:46:40 / cg"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2687
    "Modified: 12.5.1996 / 15:49:24 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2688
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2689
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2690
!CharacterArray methodsFor:'converting'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2691
11881
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2692
asAsciiZ
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2693
    "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
  2694
     with an additional 0-character. Otherwise return the receiver. This is sometimes
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2695
     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
  2696
     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
  2697
     strings are not."
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2698
12658
2e9c209be0cc changed: #asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 12615
diff changeset
  2699
    (self notEmpty and:[self last codePoint == 0]) ifTrue:[^ self ].
11881
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2700
    ^ self copyWith:(Character value:0).
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2701
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2702
    "
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2703
     'abc' asAsciiZ
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2704
     'abc' asWideString asAsciiZ
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2705
    "
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2706
!
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2707
13524
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2708
asByteArray
15936
96c6758087c1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15912
diff changeset
  2709
    "depending on the size of the characters in the receiver,
96c6758087c1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15912
diff changeset
  2710
     return a byteArray containing single-, double- or even 4-bytewise values.
96c6758087c1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15912
diff changeset
  2711
     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
  2712
     size required for the largest character.
96c6758087c1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15912
diff changeset
  2713
     Caveat: better use utf8Encoded, to get reproducable results"
96c6758087c1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15912
diff changeset
  2714
14555
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2715
    |bytes sz bytesPerCharacter idx str|
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2716
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2717
    str := self string.
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2718
    str ~~ self ifTrue:[
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2719
        "/ for text and other wrappers
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2720
        ^ str asByteArray
13611
ba8c7372218a variable renamed in: #inspector2TabBytes
Claus Gittinger <cg@exept.de>
parents: 13524
diff changeset
  2721
    ].
ba8c7372218a variable renamed in: #inspector2TabBytes
Claus Gittinger <cg@exept.de>
parents: 13524
diff changeset
  2722
ba8c7372218a variable renamed in: #inspector2TabBytes
Claus Gittinger <cg@exept.de>
parents: 13524
diff changeset
  2723
    "/ for real strings, a fallback
13524
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2724
    sz := self size.
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2725
    bytesPerCharacter := self bitsPerCharacter // 8.
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2726
    bytes := ByteArray new:(sz * bytesPerCharacter).
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2727
    idx := 1.
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2728
    self do:[:char |
14555
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2729
        |code|
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2730
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2731
        code := char codePoint.
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2732
        bytesPerCharacter == 2 ifTrue:[
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2733
            bytes unsignedShortAt:idx put:code
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2734
        ] ifFalse:[
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2735
            bytesPerCharacter == 4 ifTrue:[
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2736
                bytes unsignedLongAt:idx put:code
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2737
            ] ifFalse:[
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2738
                bytes at:idx put:code
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2739
            ].
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2740
        ].
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2741
        idx := idx + bytesPerCharacter.
13524
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2742
    ].
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2743
    ^ bytes
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2744
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2745
    "Created: / 27-07-2011 / 00:56:17 / cg"
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2746
!
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2747
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2748
asCollectionOfLines
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2749
    "return a collection containing the lines (separated by cr)
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2750
     of the receiver. If multiple cr's occur in a row, the result will
14456
d7c3e67647f1 comment/format in: #asCollectionOfLines
Claus Gittinger <cg@exept.de>
parents: 14455
diff changeset
  2751
     contain empty strings. 
d7c3e67647f1 comment/format in: #asCollectionOfLines
Claus Gittinger <cg@exept.de>
parents: 14455
diff changeset
  2752
     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
  2753
     See also #asCollectionOfLinesWithReturn
d7c3e67647f1 comment/format in: #asCollectionOfLines
Claus Gittinger <cg@exept.de>
parents: 14455
diff changeset
  2754
     (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
  2755
      this method and we did not want to risk any incompatibilities)"
14455
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2756
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2757
    ^ self asCollectionOfSubstringsSeparatedBy:Character cr.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2758
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2759
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2760
     '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
  2761
     '1 one\\\\2 two\3 three' withCRs asCollectionOfLines
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2762
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2763
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2764
14455
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2765
asCollectionOfLinesWithReturn
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2766
    "return a collection containing the lines (separated by cr)
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2767
     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
  2768
     contain empty strings."
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2769
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2770
    |lines|
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2771
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2772
    lines := self asCollectionOfSubstringsSeparatedBy:Character cr.
18194
bec89cec5d13 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18181
diff changeset
  2773
    (lines notEmpty and:[lines last isEmpty]) ifTrue:[
15167
62b89f82633c Changed usage of deprecated #copyWithoutLast: to #copyButLast:
Stefan Vogel <sv@exept.de>
parents: 15055
diff changeset
  2774
        ^ lines copyButLast:1
14455
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2775
    ].
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2776
    ^ lines
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2777
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2778
    "
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2779
     '1\2\3' withCRs asCollectionOfLines
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2780
     '1\2\3\' withCRs asCollectionOfLines
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2781
     '1\2\3' withCRs asCollectionOfLinesWithReturn
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2782
     '1\2\3\' withCRs asCollectionOfLinesWithReturn
18194
bec89cec5d13 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18181
diff changeset
  2783
     '' withCRs asCollectionOfLinesWithReturn
14455
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2784
    "
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2785
!
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2786
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2787
asCollectionOfSubstringsSeparatedBy:aCharacter
15740
87dee3333591 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15734
diff changeset
  2788
    "return a collection containing substrings (separated by aCharacter)
87dee3333591 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15734
diff changeset
  2789
     of the receiver. 
87dee3333591 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15734
diff changeset
  2790
     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
  2791
     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
  2792
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2793
    ^ self asCollectionOfSubCollectionsSeparatedBy:aCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2794
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2795
    "
15740
87dee3333591 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15734
diff changeset
  2796
     '1 one:2 two:3 three:4 four:5 five' asCollectionOfSubstringsSeparatedBy:$:  
87dee3333591 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15734
diff changeset
  2797
     '1 one:2 two:3 three:4 four:5 five:' asCollectionOfSubstringsSeparatedBy:$: 
87dee3333591 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15734
diff changeset
  2798
     '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
  2799
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2800
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2801
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2802
asCollectionOfSubstringsSeparatedBy:aCharacter exceptIn:ch
15740
87dee3333591 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15734
diff changeset
  2803
    "return a collection containing the substrings (separated by aCharacter)
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2804
     of the receiver. If aCharacter occurs multiple times in a row,
15740
87dee3333591 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15734
diff changeset
  2805
     the result will contain empty strings. 
87dee3333591 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15734
diff changeset
  2806
     The separation is not done, inside a matching pair of ch-substrings. 
87dee3333591 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15734
diff changeset
  2807
     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
  2808
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2809
    |lines myClass except i c
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2810
     startIndex    "{ Class:SmallInteger }"
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2811
     stopIndex     "{ Class:SmallInteger }" |
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2812
11905
cbc2191cfe2d return stringCollections from asCollectionOfXXX
Claus Gittinger <cg@exept.de>
parents: 11904
diff changeset
  2813
    lines := StringCollection new.
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2814
    myClass := self species.
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2815
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2816
    startIndex := 1.
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2817
    except := false.
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2818
    [
14455
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2819
        i := startIndex-1.
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2820
        [
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2821
            i := i+1.
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2822
            c := self at:i.
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2823
            c = ch ifTrue:[ except := except not. ].
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2824
            i < self size and:[except or:[c ~= aCharacter]]
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2825
        ] whileTrue.
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2826
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2827
        c = aCharacter ifTrue:[
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2828
            stopIndex := i -1.
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2829
        ] ifFalse: [
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2830
            stopIndex := i.
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2831
        ].
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2832
        (stopIndex < startIndex) ifTrue: [
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2833
            lines add:(myClass new:0)
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2834
        ] ifFalse: [
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2835
            lines add:(self copyFrom:startIndex to:stopIndex)
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2836
        ].
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2837
        startIndex := stopIndex + 2.
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2838
        startIndex <= self size
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2839
    ] whileTrue.
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2840
    ^ lines
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2841
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2842
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2843
     'asd''f;d''dd;s' asCollectionOfSubstringsSeparatedBy:$; exceptIn:$'
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2844
    "
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2845
    "/ 'asd "hello bla" foo "bla bla" bar' asCollectionOfSubstringsSeparatedBy:$  exceptIn:$"
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
13344
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2848
asCollectionOfSubstringsSeparatedBy:aFieldSeparatorString textSeparator:aTextSeparatorOrNil
13343
3f058ad0d2f1 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13332
diff changeset
  2849
    "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
  2850
     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
  2851
     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
  2852
13344
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2853
    |aTextSeparatorChar items scanningWord inStream element lastIsFieldSeparator sz|
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2854
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2855
    aTextSeparatorOrNil isNil ifTrue:[
15431
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2856
        ^ self asCollectionOfSubstringsSeparatedByAll: aFieldSeparatorString
13327
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2857
    ].
13344
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2858
    sz := aTextSeparatorOrNil size.
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2859
    sz = 0 ifTrue:[
15431
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2860
        aTextSeparatorChar := aTextSeparatorOrNil
13344
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2861
    ] ifFalse:[sz = 1  ifTrue:[
15431
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2862
        "this is a String. Fetch the first character - compatibility to older expecco libs"
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2863
        aTextSeparatorChar := aTextSeparatorOrNil first.
13344
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2864
    ] ifFalse:[
15431
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2865
        self error:'textSeparatoSize > 1'.
13344
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2866
    ]].
13327
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2867
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2868
    items := OrderedCollection new.
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2869
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2870
    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
  2871
    [
15431
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2872
        inStream skipSeparators.
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2873
        inStream atEnd
13327
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2874
    ] whileFalse:[
15431
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2875
        lastIsFieldSeparator := false.
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2876
        inStream peek == aTextSeparatorChar ifTrue:[
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2877
            inStream next.
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2878
            element := ''.
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2879
            scanningWord := true.
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2880
            [ scanningWord and:[inStream atEnd not] ] whileTrue:[
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2881
                element := element , (inStream upTo:aTextSeparatorChar).
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2882
                (inStream peek == aTextSeparatorChar) ifTrue:[
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2883
                    element := element , aTextSeparatorChar .
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2884
                    inStream next.
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2885
                ] ifFalse:[
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2886
                    scanningWord := false.
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2887
                ].
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2888
            ].
16200
8b5fa2bc2400 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 16181
diff changeset
  2889
            inStream upToAll_positionBefore:aFieldSeparatorString.
15431
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2890
        ] ifFalse:[
16200
8b5fa2bc2400 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 16181
diff changeset
  2891
            element := inStream upToAll_positionBefore:aFieldSeparatorString
15431
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2892
        ].
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2893
        items add:element.
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2894
        lastIsFieldSeparator := (inStream skipThroughAll:aFieldSeparatorString) notNil.
13343
3f058ad0d2f1 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13332
diff changeset
  2895
    ].
3f058ad0d2f1 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13332
diff changeset
  2896
    lastIsFieldSeparator ifTrue:[
15431
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2897
        "empty element at the end of the line"
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2898
        items add:''.
13327
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2899
    ].
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2900
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2901
    ^ items
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2902
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2903
    "
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2904
     self assert:(('#First#, #Second,SecondAdd#, #Third#' asCollectionOfSubstringsSeparatedBy:',' textSeparator: $#)
15431
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2905
                  sameContentsAs:#('First' 'Second,SecondAdd' 'Third')).
13327
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2906
     self assert:(('#Fir##st#, #Second,SecondAdd#, #Third#' asCollectionOfSubstringsSeparatedBy:',' textSeparator: $#)
15431
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2907
                  sameContentsAs:#('Fir#st' 'Second,SecondAdd' 'Third')).
13327
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2908
     self assert:(('#Fir##st#, Second,SecondAdd, #Third#' asCollectionOfSubstringsSeparatedBy:',' textSeparator: $#)
15431
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2909
                  sameContentsAs:#('Fir#st' 'Second' 'SecondAdd' 'Third')).
13343
3f058ad0d2f1 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13332
diff changeset
  2910
     self assert:(('First,Second,Third,,' asCollectionOfSubstringsSeparatedBy:',' textSeparator:nil)
15431
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2911
                   sameContentsAs:#('First' 'Second' 'Third' '' '')).
13344
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2912
     self assert:(('First,Second,Third,,' asCollectionOfSubstringsSeparatedBy:',' textSeparator:'#')
15431
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2913
                   sameContentsAs:#('First' 'Second' 'Third' '' '')).
13327
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2914
    "
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2915
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2916
    "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
  2917
!
999589445aa7 add new method for splitting a csv string into csv elements
ab
parents: 10437
diff changeset
  2918
7339
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2919
asCollectionOfSubstringsSeparatedByAll:aSeparatorString
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2920
    "return a collection containing the lines (separated by aSeparatorString)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2921
     of the receiver. If aSeparatorString occurs multiple times in a row,
7339
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2922
     the result will contain empty strings."
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2923
8852
9f5984eff2c2 use asCollectionOfSubCollectionsSeparatedBy*
Claus Gittinger <cg@exept.de>
parents: 8794
diff changeset
  2924
    ^ self asCollectionOfSubCollectionsSeparatedByAll:aSeparatorString
9f5984eff2c2 use asCollectionOfSubCollectionsSeparatedBy*
Claus Gittinger <cg@exept.de>
parents: 8794
diff changeset
  2925
9f5984eff2c2 use asCollectionOfSubCollectionsSeparatedBy*
Claus Gittinger <cg@exept.de>
parents: 8794
diff changeset
  2926
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2927
     '1::2::3::4::5::' asCollectionOfSubstringsSeparatedByAll:'::'
7339
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2928
    "
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2929
!
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2930
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2931
asCollectionOfSubstringsSeparatedByAny:aCollectionOfSeparators
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2932
    "return a collection containing the words (separated by any character
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2933
     from aCollectionOfSeparators) of the receiver.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2934
     This allows breaking up strings using any character as separator."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2935
8852
9f5984eff2c2 use asCollectionOfSubCollectionsSeparatedBy*
Claus Gittinger <cg@exept.de>
parents: 8794
diff changeset
  2936
    ^ self asCollectionOfSubCollectionsSeparatedByAny:aCollectionOfSeparators
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2937
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2938
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2939
     'hello:world:isnt:this nice' asCollectionOfSubstringsSeparatedByAny:#($:)
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2940
     'hello:world:isnt:this nice' asCollectionOfSubstringsSeparatedByAny:':'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2941
     'hello:world:isnt:this nice' asCollectionOfSubstringsSeparatedByAny:(Array with:$: with:Character space)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2942
     'hello:world:isnt:this nice' asCollectionOfSubstringsSeparatedByAny:': '
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2943
     'h1e2l3l4o' asCollectionOfSubstringsSeparatedByAny:($1 to: $9)
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2944
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2945
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2946
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2947
asCollectionOfWords
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2948
    "return a collection containing the words (separated by whitespace)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2949
     of the receiver. Multiple occurrences of whitespace characters will
17517
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
  2950
     be treated like one - i.e. whitespace is skipped.
7a7bd8c467c7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17511
diff changeset
  2951
     (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
  2952
7797
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2953
    |words|
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2954
11905
cbc2191cfe2d return stringCollections from asCollectionOfXXX
Claus Gittinger <cg@exept.de>
parents: 11904
diff changeset
  2955
    words := StringCollection new.
7797
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2956
    self asCollectionOfWordsDo:[:w | words add:w].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2957
    ^ words
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2958
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2959
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2960
     'hello world isnt this nice' asCollectionOfWords
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2961
     '    hello    world   isnt   this   nice  ' asCollectionOfWords
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2962
     'hello' asCollectionOfWords
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2963
     '' asCollectionOfWords
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2964
     '      ' asCollectionOfWords
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2965
     ' foo bar__baz__bla__ bar ' asCollectionOfWords
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2966
     ' foo __bar__baz__bla__ bar ' asCollectionOfWords
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2967
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2968
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2969
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2970
asCollectionOfWordsDo:aBlock
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2971
    "evaluate aBlock for each word (separated by whitespace) of the receiver.
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2972
     Multiple occurrences of whitespace characters will be treated like one
7797
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2973
     - i.e. whitespace is skipped.
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2974
     Returns the number of words (i.e. the number of invocations of aBlock)."
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2975
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2976
    |count  "{ Class:SmallInteger }"
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2977
     start  "{ Class:SmallInteger }"
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2978
     stop   "{ Class:SmallInteger }"
7797
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2979
     mySize "{ Class:SmallInteger }"|
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2980
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2981
    count := 0.
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2982
    start := 1.
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2983
    mySize := self size.
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2984
    [start <= mySize] whileTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2985
        start := self indexOfNonSeparatorStartingAt:start.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2986
        start == 0 ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2987
            ^ count
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2988
        ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2989
        stop := self indexOfSeparatorStartingAt:start.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2990
        stop == 0 ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2991
            aBlock value:(self copyFrom:start to:mySize).
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2992
            ^ count + 1
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2993
        ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2994
        aBlock value:(self copyFrom:start to:(stop - 1)).
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2995
        start := stop.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2996
        count := count + 1
7797
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2997
    ].
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2998
    ^ count
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2999
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  3000
    "
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  3001
     'hello world isnt this nice' asCollectionOfWordsDo:[:w | Transcript showCR:w]
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  3002
     '    hello    world   isnt   this   nice  ' asCollectionOfWordsDo:[:w | Transcript showCR:w]
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  3003
     'hello' asCollectionOfWordsDo:[:w | Transcript showCR:w]
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  3004
     '' asCollectionOfWordsDo:[:w | Transcript showCR:w]
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  3005
     '      ' asCollectionOfWordsDo:[:w | Transcript showCR:w]
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  3006
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3007
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3008
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3009
asFilename
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3010
    "return a Filename with pathname taken from the receiver"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3011
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3012
    ^ Filename named:self "(self asSingleByteStringReplaceInvalidWith:$?)"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3013
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3014
    "Modified: 20.5.1996 / 09:38:15 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3015
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3016
3060
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3017
asFixedPoint
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3018
    "read a fixedPoint number from the receiver.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3019
     Notice, that errors may occur during the read,
7423
5b25b8e82453 comments
Claus Gittinger <cg@exept.de>
parents: 7422
diff changeset
  3020
     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
  3021
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3022
    ^ FixedPoint readFromString:self
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3023
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3024
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3025
     '0.123' asFixedPoint
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3026
     '12345' asFixedPoint
3060
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3027
     '(1/5)' asFixedPoint
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3028
     'foo' asFixedPoint
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3029
     Object errorSignal handle:[:ex | ex return:0] do:['foo' asFixedPoint]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3030
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3031
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3032
    "Modified: / 25.10.1997 / 15:19:00 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3033
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3034
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3035
asFixedPoint:scale
3060
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3036
    "read a fixedPoint number with scale number of post-decimal digits
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3037
     from the receiver. Scale controls the number of displayed digits,
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3038
     not the number of actually valid digits.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3039
     Notice, that errors may occur during the read,
7423
5b25b8e82453 comments
Claus Gittinger <cg@exept.de>
parents: 7422
diff changeset
  3040
     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
  3041
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3042
    ^ (FixedPoint readFromString:self) scale:scale
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3043
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3044
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3045
     '0.123' asFixedPoint:2
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3046
     '123456' asFixedPoint:2
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3047
     ('3.14157' asFixedPoint:1) asFixedPoint:5
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3048
     '3.14157' asFixedPoint:2
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3049
     'foo' asFixedPoint:2
3060
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3050
    "
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3051
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3052
    "Modified: / 25.10.1997 / 15:21:57 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3053
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3054
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3055
asFloat
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3056
    "read a float 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,
7422
200486204923 comments
Claus Gittinger <cg@exept.de>
parents: 7421
diff changeset
  3058
     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
  3059
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3060
    ^ (Number readFromString:self) asFloat
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3061
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3062
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3063
     '0.123' asFloat
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3064
     '12345' asFloat
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3065
     '(1/5)' asFloat
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3066
     Object errorSignal handle:[:ex | ex return:0] do:['foo' asFloat]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3067
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3068
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3069
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3070
asInteger
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3071
    "convert the receiver into an integer.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3072
     Notice, that errors may occur during the read,
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3073
     so you better setup some exception handler when using this method.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3074
     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
  3075
     in other smalltalks.
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3076
     For less strict integer reading, use Integer readFrom:aString"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3077
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3078
    ^ Integer readFromString:self
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3079
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3080
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3081
     '12345678901234567890' asInteger
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3082
     '-1234' asInteger
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3083
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3084
     The following raises an error:
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3085
         '0.123' asInteger              <- reader finds more after reading 0
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3086
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3087
     whereas the less strict readFrom does not:
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3088
         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
  3089
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3090
     '0.123' asInteger
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3091
     '0.123' asNumber    <- returns what you expect
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3092
     Object errorSignal handle:[:ex | ex return:0] do:['foo' asInteger]
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3093
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3094
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3095
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3096
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3097
asLowercase
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3098
    "return a copy of myself in lowercase letters"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3099
8003
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3100
    |newStr c bitsPerCharacter
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3101
     mySize "{ Class: SmallInteger }" |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3102
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3103
    mySize := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3104
    mySize == 0 ifTrue:[^ self].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3105
    newStr := self species new:mySize.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3106
    bitsPerCharacter := newStr bitsPerCharacter.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3107
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3108
    1 to:mySize do:[:i |
14555
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  3109
        c := (self at:i) asLowercase.
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  3110
        (c bitsPerCharacter > bitsPerCharacter 
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  3111
         and:[c stringSpecies ~= newStr stringSpecies]) ifTrue:[
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  3112
            newStr := c stringSpecies fromString:newStr.
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  3113
        ].
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  3114
        newStr at:i put:c
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3115
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3116
    ^ newStr
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3117
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3118
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3119
     'HelloWorld' asLowercase
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3120
     'HelloWorld' asLowercaseFirst
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3121
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3122
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3123
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3124
asLowercaseFirst
17508
8fe97d926c7d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17486
diff changeset
  3125
    "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
  3126
     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
  3127
     receiver."
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3128
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3129
    |newString firstChar firstCharAsLowercase|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3130
11525
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
  3131
    self isEmpty ifTrue:[^ self].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3132
    firstChar := (self at:1).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3133
    firstCharAsLowercase := firstChar asLowercase.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3134
    firstChar == firstCharAsLowercase ifTrue:[ ^ self].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3135
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3136
    firstCharAsLowercase bitsPerCharacter > self bitsPerCharacter ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3137
        newString := firstCharAsLowercase stringSpecies fromString:self.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3138
    ] ifFalse:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3139
        newString := self stringSpecies fromString:self.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3140
    ].
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3141
    newString at:1 put:firstCharAsLowercase.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3142
    ^ newString
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3143
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3144
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3145
     'HelloWorld' asLowercase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3146
     'HelloWorld' asLowercaseFirst
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3147
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3148
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3149
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3150
asLowercaseLast
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3151
    "return a copy of myself where the last character is
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3152
     converted to lowercase."
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3153
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3154
    |newString sz|
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3155
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3156
    sz := self size.
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3157
    newString := self copyFrom:1 to:sz.
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3158
    sz > 0 ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3159
        newString at:sz put:(newString at:sz) asLowercase
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3160
    ].
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3161
    ^ newString
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3162
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3163
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3164
     'HelloWorld' asLowercase
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3165
     'HelloWorlD' asLowercaseLast
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3166
    "
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3167
!
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3168
17644
db81a12ac65d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17625
diff changeset
  3169
asMutator
db81a12ac65d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17625
diff changeset
  3170
    "return a corresponding setter method's selector"
db81a12ac65d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17625
diff changeset
  3171
db81a12ac65d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17625
diff changeset
  3172
    ^ (self asOneByteString,':') asSymbol
db81a12ac65d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17625
diff changeset
  3173
!
db81a12ac65d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17625
diff changeset
  3174
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3175
asNumber
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3176
    "read a number from the receiver.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3177
     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
  3178
     so you better setup some signal handler when using this method.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3179
     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
  3180
     it does not handle smalltalk numbers (i.e. radix).
c6396149df08 comment
Claus Gittinger <cg@exept.de>
parents: 9087
diff changeset
  3181
     To read a smalltalk number, use Number >> readSmalltalkFrom:.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3182
     This may change if ANSI specifies it."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3183
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3184
"/ ST-80 behavior:
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3185
"/  ^ Number readFromString:self onError:0
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3186
17061
c1de9e428073 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17043
diff changeset
  3187
    ^ Number fromString:self
c1de9e428073 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17043
diff changeset
  3188
c1de9e428073 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17043
diff changeset
  3189
    "
c1de9e428073 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17043
diff changeset
  3190
     '123'     asNumber 
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3191
     '123.567' asNumber
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3192
     '(5/6)'   asNumber
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3193
     'foo'     asNumber
17061
c1de9e428073 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17043
diff changeset
  3194
     '123a'    asNumber
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3195
     Object errorSignal handle:[:ex | ex returnWith:0] do:['foo' asNumber]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3196
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3197
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3198
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3199
asNumberFromFormatString:ignored
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3200
    "read a number from the receiver, ignoring any nonDigit characters.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3201
     This is typically used to convert from strings which include
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3202
     dollar-signs or millenium digits. However, this method also ignores
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3203
     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
  3204
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3205
    |tempString|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3206
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3207
    tempString := self collect:[:char | char isDigit].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3208
    ^ Number readFromString:tempString onError:0
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3209
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3210
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3211
     'USD 123' asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3212
     'DM 123'  asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3213
     '123'     asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3214
     '123.567' asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3215
     '(5/6)'   asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3216
     'foo'     asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3217
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3218
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3219
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3220
asSingleByteString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3221
    "return the receiver converted to a 'normal' string.
11904
f766874c31b7 comment
Claus Gittinger <cg@exept.de>
parents: 11881
diff changeset
  3222
     Raises an error if unrepresentable characters are encountered.
f766874c31b7 comment
Claus Gittinger <cg@exept.de>
parents: 11881
diff changeset
  3223
     See also: asSingleByteStringIfPossible and asSingleByteStringReplaceInvalidWith:"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3224
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3225
    ^ String fromString:self
11904
f766874c31b7 comment
Claus Gittinger <cg@exept.de>
parents: 11881
diff changeset
  3226
f766874c31b7 comment
Claus Gittinger <cg@exept.de>
parents: 11881
diff changeset
  3227
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3228
     (Unicode16String with:(Character value:16rFF)) asSingleByteString
11904
f766874c31b7 comment
Claus Gittinger <cg@exept.de>
parents: 11881
diff changeset
  3229
     (Unicode16String with:(Character value:16rFFFF)) asSingleByteString
f766874c31b7 comment
Claus Gittinger <cg@exept.de>
parents: 11881
diff changeset
  3230
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3231
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3232
7977
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  3233
asSingleByteStringIfPossible
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  3234
    "if possible, return the receiver converted to a 'normal' string.
18181
f180c4847ddc class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 18172
diff changeset
  3235
     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
  3236
     If not possible, the (wideString) receiver is returned."
7977
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  3237
14555
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  3238
    self isWideString ifFalse:[^ self].
8102
e0537422e2d3 Use the ANSI-blessed #codePoint instead of deprecated #asciiValue
Stefan Vogel <sv@exept.de>
parents: 8083
diff changeset
  3239
    (self contains:[:char | char codePoint > 255]) ifFalse:[^ self asSingleByteString].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3240
    ^ self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3241
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3242
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3243
     'hello' asSingleByteStringIfPossible
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3244
     'hello' asUnicodeString asSingleByteStringIfPossible
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3245
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3246
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3247
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3248
asSingleByteStringReplaceInvalidWith:replacementCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3249
    "return the receiver converted to a 'normal' string,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3250
     with invalid characters replaced by replacementCharacter.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3251
     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
  3252
     and replace characters above code-255 with some replacement."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3253
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3254
    |newString|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3255
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3256
    newString := String new:(self size).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3257
    1 to:self size do:[:idx |
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3258
        |char|
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3259
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3260
        char := self at:idx.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3261
        char codePoint <= 16rFF ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3262
            newString at:idx put:char
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3263
        ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3264
            newString at:idx put:replacementCharacter
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3265
        ].
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3266
    ].
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3267
    ^ newString
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3268
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3269
    "Created: 30.6.1997 / 13:02:14 / cg"
7977
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  3270
!
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  3271
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3272
asString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3273
    "return myself - I am a string"
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
    ^ self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3276
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3277
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3278
asStringCollection
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3279
    "return a collection of lines from myself."
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
    ^ StringCollection fromString:self "string"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3282
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3283
    "Modified: 13.5.1996 / 20:36:59 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3284
!
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3285
1434
a317ba02d685 allow aText asSymbol
Claus Gittinger <cg@exept.de>
parents: 1429
diff changeset
  3286
asSymbol
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  3287
    "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
  3288
     The receiver must be a singleByte-String.
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  3289
     TwoByte- and FourByteSymbols are (currently ?) not allowed."
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  3290
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  3291
    |str|
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  3292
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3293
    str := self string.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3294
    str ~~ self ifTrue:[ ^ str asSymbol ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3295
    ^ self asSingleByteString asSymbol
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3296
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3297
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3298
asSymbolIfInterned
17183
f86492476cc5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17165
diff changeset
  3299
    "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
  3300
     This can be used to query for an existing symbol and is the same as:
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3301
        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
  3302
     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
  3303
     The receiver must be a singleByte-String.
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  3304
     TwoByte- and FourByteSymbols are (currently ?) not allowed."
1435
3ee1fde2aa58 allow asSymbolIfInterned for Texts
Claus Gittinger <cg@exept.de>
parents: 1434
diff changeset
  3305
6642
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  3306
    |s|
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  3307
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  3308
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  3309
    s := self string.
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  3310
    s ~~ self ifTrue:[
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  3311
       ^ s asSymbolIfInterned
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  3312
    ].
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  3313
    ^ nil.
1435
3ee1fde2aa58 allow asSymbolIfInterned for Texts
Claus Gittinger <cg@exept.de>
parents: 1434
diff changeset
  3314
3ee1fde2aa58 allow asSymbolIfInterned for Texts
Claus Gittinger <cg@exept.de>
parents: 1434
diff changeset
  3315
    "Created: 22.5.1996 / 16:37:04 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3316
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3317
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3318
asText
9403
ba6ca2bcfe10 documentation
Stefan Vogel <sv@exept.de>
parents: 9391
diff changeset
  3319
    "return a Text-object (string with emphasis) from myself."
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3320
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3321
    "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
  3322
    Text isNil ifTrue:[^ self].
17065
9ed49d70737a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17061
diff changeset
  3323
    ^ Text string:self
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3324
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3325
    "Created: 12.5.1996 / 10:41:14 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3326
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3327
17021
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3328
asTimestamp
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3329
    "convert the receiver into an Timestamp.
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3330
     Notice, that errors may occur during the read,
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3331
     so you better setup some exception handler when using this method."
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3332
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3333
    ^ Timestamp readFromString:self
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3334
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3335
    "
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3336
     '2014-11-10 21:30:22.444' asTimestamp
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3337
     '2014-11-10 21:30:22.444Z' asTimestamp
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3338
     '2014-11-10 21:30:22.444+0200' asTimestamp
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3339
    "
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3340
!
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3341
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3342
asTitlecase
8027
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3343
    "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
  3344
     and everything else to lowercase.
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3345
     See the comment in Character on what titlecase is."
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3346
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3347
    |newStr c bitsPerCharacter
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3348
     mySize "{ Class: SmallInteger }" |
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3349
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3350
    mySize := self size.
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3351
    newStr := self species new:mySize.
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3352
    bitsPerCharacter := newStr bitsPerCharacter.
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3353
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3354
    1 to:mySize do:[:i |
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3355
        i == 1 ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3356
            c := (self at:i) asTitlecase.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3357
        ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3358
            c := (self at:i) asLowercase.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3359
        ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3360
        c bitsPerCharacter > bitsPerCharacter ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3361
            newStr := c stringSpecies fromString:newStr.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3362
        ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3363
        newStr at:i put:c
8027
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3364
    ].
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3365
    ^ newStr
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3366
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3367
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3368
     'helloWorld' asTitlecase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3369
     'HelloWorld' asTitlecase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3370
     'HELLOWORLD' asTitlecase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3371
     'helloworld' asTitlecase
8027
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3372
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3373
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3374
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3375
asTitlecaseFirst
8023
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3376
    "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
  3377
     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
  3378
     (2-character glyphs), which consist of an upper- and lower-case characters.
93db40068fba comment
Claus Gittinger <cg@exept.de>
parents: 8023
diff changeset
  3379
     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
  3380
     receiver."
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3381
8026
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  3382
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3383
     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
  3384
     (Let us write this compound character using ASCII as 'dz'.)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3385
     This character uppercases to character U+01F1, LATIN CAPITAL LETTER DZ.
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3386
     (Which is basically 'DZ'.)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3387
     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
  3388
     (Which we can write 'Dz'.)
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  3389
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  3390
      character uppercase titlecase
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  3391
      --------- --------- ---------
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  3392
      dz        DZ        Dz
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  3393
    "
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  3394
8023
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3395
    |newString firstChar firstCharAsTitlecase|
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3396
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3397
    firstChar := (self at:1).
8025
04d9b6ef3012 comments
Claus Gittinger <cg@exept.de>
parents: 8024
diff changeset
  3398
    firstCharAsTitlecase := firstChar asTitlecase.
8023
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3399
    firstChar == firstCharAsTitlecase ifTrue:[ ^ self].
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  3400
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  3401
    firstCharAsTitlecase bitsPerCharacter > self bitsPerCharacter ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3402
        newString := firstCharAsTitlecase stringSpecies fromString:self.
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  3403
    ] ifFalse:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3404
        newString := self stringSpecies fromString:self.
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  3405
    ].
8023
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3406
    newString at:1 put:firstCharAsTitlecase.
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3407
    ^ newString
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3408
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3409
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3410
     'helloWorld' asTitlecaseFirst
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3411
     'HelloWorld' asTitlecaseFirst
8023
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3412
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3413
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3414
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3415
asTwoByteString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3416
    "return the receiver converted to a two-byte string.
16051
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  3417
     Will be obsolete soon - use asUnicode16String."
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3418
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3419
    ^ TwoByteString fromString:self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3420
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3421
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3422
asURI
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3423
    "return an URI with string taken from the receiver"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3424
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3425
    ^ URI fromString:self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3426
!
8710
Stefan Vogel <sv@exept.de>
parents: 8646
diff changeset
  3427
5776
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  3428
asURL
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  3429
    "return an URL-object from myself."
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  3430
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  3431
    ^ URL fromString:self
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  3432
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  3433
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3434
     'http://www.exept.de:80/index.html' asURL host
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3435
     'http://www.exept.de:80/index.html' asURL port
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3436
     'http://www.exept.de:80/index.html' asURL method
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3437
     'http://www.exept.de:80/index.html' asURL path
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3438
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3439
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3440
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3441
asUnicode16String
15035
ecbb70df7a5c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14993
diff changeset
  3442
    "return the receiver in a two-byte per character representation.
ecbb70df7a5c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14993
diff changeset
  3443
     Normally, the internal ST/X representation should be transparent and not
ecbb70df7a5c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14993
diff changeset
  3444
     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
  3445
     such as wide-string ffi calls or file contents."
ecbb70df7a5c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14993
diff changeset
  3446
17600
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3447
     |sz|
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3448
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3449
     sz := self size.
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3450
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3451
     ^ (Unicode16String new:sz) 
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3452
           replaceFrom:1 to:sz with:self startingAt:1;
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3453
           yourself.
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3454
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3455
    "
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3456
        'abc' asUnicode16String
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3457
    "
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3458
!
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3459
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3460
asUnicode16StringZ
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3461
    "return the receiver in a two-byte per character representation.
17625
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  3462
     Make sure that is zero terminated (last char is 16r0000).
17600
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3463
     Normally, the internal ST/X representation should be transparent and not
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3464
     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
  3465
     such as wide-string ffi calls or file contents."
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3466
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3467
     |sz|
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3468
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3469
     sz := self size.
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3470
     (self at:sz) == (Character codePoint:0) ifTrue:[
17625
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  3471
         ^ self asUnicode16String.
17600
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3472
     ].        
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3473
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3474
     ^ (Unicode16String new:sz+1) 
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3475
           replaceFrom:1 to:sz with:self startingAt:1;
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3476
           at:sz+1 put:(Character codePoint:0);
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3477
           yourself.
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3478
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3479
     "
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3480
        'abc' asUnicode16StringZ
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3481
        'abc' asUnicode16String asUnicode16StringZ
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  3482
     "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3483
!
8295
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3484
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3485
asUnicode32String
16051
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  3486
    "return the receiver in a four-byte per character representation.
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  3487
     Normally, the internal ST/X representation should be transparent and not
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  3488
     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
  3489
     such as wide-string ffi calls or file contents."
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  3490
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  3491
    ^ self as:Unicode32String
8295
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3492
!
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3493
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3494
asUnicodeString
16051
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  3495
    "return the receiver in a two-byte per character representation.
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  3496
     Normally, the internal ST/X representation should be transparent and not
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  3497
     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
  3498
     such as wide-string ffi calls or file contents."
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  3499
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  3500
    ^ self asUnicode16String
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  3501
    "
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  3502
     'Hello World' asUnicodeString
14141
e86d245213b0 comment/format in: #asUnicodeString
Stefan Vogel <sv@exept.de>
parents: 14137
diff changeset
  3503
    "
8295
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3504
!
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3505
13073
19261a5b4430 added: #asUnixFilename
Claus Gittinger <cg@exept.de>
parents: 13050
diff changeset
  3506
asUnixFilename
19261a5b4430 added: #asUnixFilename
Claus Gittinger <cg@exept.de>
parents: 13050
diff changeset
  3507
    "return a UnixFilename with pathname taken from the receiver"
19261a5b4430 added: #asUnixFilename
Claus Gittinger <cg@exept.de>
parents: 13050
diff changeset
  3508
19261a5b4430 added: #asUnixFilename
Claus Gittinger <cg@exept.de>
parents: 13050
diff changeset
  3509
    ^ UnixFilename named:self
19261a5b4430 added: #asUnixFilename
Claus Gittinger <cg@exept.de>
parents: 13050
diff changeset
  3510
19261a5b4430 added: #asUnixFilename
Claus Gittinger <cg@exept.de>
parents: 13050
diff changeset
  3511
    "Created: / 20-09-2010 / 21:42:55 / cg"
19261a5b4430 added: #asUnixFilename
Claus Gittinger <cg@exept.de>
parents: 13050
diff changeset
  3512
!
19261a5b4430 added: #asUnixFilename
Claus Gittinger <cg@exept.de>
parents: 13050
diff changeset
  3513
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3514
asUppercase
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3515
    "return a copy of myself in uppercase letters"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3516
8003
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3517
    |newStr c bitsPerCharacter
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3518
     mySize "{ Class: SmallInteger }" |
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3519
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3520
    mySize := self size.
8954
12e701d7b5ac allow for receiver to be empty in asLowercase and asUppercase.
Claus Gittinger <cg@exept.de>
parents: 8938
diff changeset
  3521
    mySize == 0 ifTrue:[^ self].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3522
    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
  3523
    bitsPerCharacter := newStr bitsPerCharacter.
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3524
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3525
    1 to:mySize do:[:i |
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3526
        c := (self at:i) asUppercase.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3527
        c bitsPerCharacter > bitsPerCharacter ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3528
            newStr := c stringSpecies fromString:newStr.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3529
        ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3530
        newStr at:i put:c
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3531
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3532
    ^ newStr
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3533
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3534
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3535
     'helloWorld' asUppercase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3536
     'helloWorld' asUppercaseFirst
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3537
     (Character value:16rB5) asString asUppercase   -- needs 16 bits !!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3538
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3539
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3540
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3541
asUppercaseFirst
8003
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3542
    "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
  3543
     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
  3544
     receiver."
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3545
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3546
    |newString firstChar firstCharAsUppercase|
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3547
12679
18c4eabbb673 changed: #asUppercaseFirst
Claus Gittinger <cg@exept.de>
parents: 12665
diff changeset
  3548
    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
  3549
    firstChar := self at:1.
8003
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3550
    firstCharAsUppercase := firstChar asUppercase.
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3551
    firstChar == firstCharAsUppercase ifTrue:[ ^ self].
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3552
12679
18c4eabbb673 changed: #asUppercaseFirst
Claus Gittinger <cg@exept.de>
parents: 12665
diff changeset
  3553
    "/ 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
  3554
    firstCharAsUppercase bitsPerCharacter > self bitsPerCharacter ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3555
        newString := firstCharAsUppercase stringSpecies fromString:self.
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  3556
    ] ifFalse:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3557
        newString := self stringSpecies fromString:self.
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  3558
    ].
8003
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3559
    newString at:1 put:firstCharAsUppercase.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3560
    ^ newString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3561
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3562
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3563
     'helloWorld' asUppercase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3564
     'helloWorld' asUppercaseFirst
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3565
     'HelloWorld' asUppercaseFirst
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3566
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3567
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3568
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3569
asUppercaseLast
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3570
    "return a copy of myself where the last character is
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3571
     converted to uppercase."
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3572
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3573
    |newString sz|
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3574
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3575
    sz := self size.
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3576
    newString := self copyFrom:1 to:sz.
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3577
    sz > 0 ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3578
        newString at:sz put:(newString at:sz) asUppercase
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3579
    ].
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3580
    ^ newString
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3581
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3582
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3583
     'HelloWorld' asUppercase
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3584
     'HelloWorld' asUppercaseLast
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3585
    "
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3586
!
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3587
17021
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3588
asUtcTimestamp
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3589
    "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
  3590
     Notice, that errors may occur during the read,
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3591
     so you better setup some exception handler when using this method."
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3592
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3593
    ^ UtcTimestamp readFromString:self
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3594
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3595
    "
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3596
     '2014-11-10 21:30:22.444' asUtcTimestamp
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3597
    "
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3598
!
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3599
11062
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3600
literalArrayEncoding
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3601
    "encode myself as an array literal, from which a copy of the receiver
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3602
     can be reconstructed with #decodeAsLiteralArray."
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3603
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3604
    ^ self
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3605
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3606
    "Modified: 1.9.1995 / 02:25:45 / claus"
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3607
    "Modified: 22.4.1996 / 13:00:50 / cg"
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3608
!
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3609
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3610
string
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3611
    "return the receiver - for ST-80 compatibility"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3612
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3613
    ^ self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3614
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3615
    "Modified: 27.4.1996 / 13:29:30 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3616
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3617
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3618
!CharacterArray methodsFor:'copying'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3619
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3620
, aStringOrCharacter
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3621
    "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
  3622
     This is nonStandard, but convenient"
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3623
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3624
    |myWidth otherWidth|
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3625
1050
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3626
    aStringOrCharacter isCharacter ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3627
        ^ self copyWith:aStringOrCharacter
1050
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3628
    ].
1396
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3629
    aStringOrCharacter isText ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3630
        ^ aStringOrCharacter concatenateFromString:self
1396
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3631
    ].
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3632
    aStringOrCharacter isString ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3633
        (otherWidth := aStringOrCharacter bitsPerCharacter) ~~ (myWidth := self bitsPerCharacter) ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3634
            otherWidth > myWidth ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3635
                ^ (aStringOrCharacter species fromString:self) , aStringOrCharacter
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3636
            ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3637
            ^ self , (self species fromString:aStringOrCharacter)
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3638
        ].
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3639
    ].
1050
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3640
    ^ super , aStringOrCharacter
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3641
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3642
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3643
     'hello' , $1
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3644
     'hello' , '1'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3645
     'hello' , (' world' asText allBold)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3646
     'hello' , (JISEncodedString fromString:' world')
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3647
     (JISEncodedString fromString:'hello') , ' world'
1411
a3b3ab3044c6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1396
diff changeset
  3648
1422
9a0b792f2953 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1411
diff changeset
  3649
     Transcript showCR:
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3650
         (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
  3651
    "
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3652
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3653
    "Modified: 28.6.1997 / 00:13:17 / cg"
9192
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
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3656
,, aString
7020
f51001115a54 comment
penk
parents: 6998
diff changeset
  3657
    "concatenate with a newLine in between"
6965
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3658
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3659
    ^ (self copyWith:Character cr) , aString
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3660
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3661
   "
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3662
     hello ,, world
7020
f51001115a54 comment
penk
parents: 6998
diff changeset
  3663
     'hello' ,, 'world'
6965
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3664
   "
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3665
!
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3666
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3667
chopTo:maxLen
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3668
    "if the receivers size is less or equal to maxLen, return it.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3669
     Otherwise, return a copy of the receiver, where some characters
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3670
     in the middle have been removed for a total string length
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3671
     of maxLen."
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3672
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3673
    |sz n1 n2|
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3674
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3675
    (sz := self size) <= maxLen ifTrue:[ ^ self ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3676
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3677
    n1 := n2 := maxLen // 2.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3678
    maxLen odd ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3679
        n2 := n1 + 1
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3680
    ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3681
    ^ (self copyFrom:1 to:n1) , (self copyFrom:sz - n2 + 1)
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3682
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3683
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3684
     '12345678901234'   chopTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3685
     '123456789012345'  chopTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3686
     '1234567890123456' chopTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3687
     'aShortString' chopTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3688
     'aVeryLongNameForAStringThatShouldBeShortened' chopTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3689
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3690
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3691
    "Modified: / 24-10-2006 / 12:32:01 / cg"
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3692
!
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3693
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3694
concatenate:string1 and:string2
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3695
    "return the concatenation of myself and the arguments, string1 and string2.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3696
     This is equivalent to self , string1 , string2
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3697
     - 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
  3698
     is known to be a string."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3699
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3700
    ^ self , string1 , string2
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3701
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3702
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3703
concatenate:string1 and:string2 and:string3
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3704
    "return the concatenation of myself and the string arguments.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3705
     This is equivalent to self , string1 , string2 , string3
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3706
     - 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
  3707
     is known to be a string."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3708
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3709
    ^ self , string1 , string2 , string3
8040
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3710
!
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3711
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3712
contractAtBeginningTo:maxLen
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3713
    "if the receivers size is less or equal to maxLen, return it.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3714
     Otherwise, return a copy of the receiver, where some characters
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3715
     at the beginning have been replaced by '...' for a total string length
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3716
     of maxLen. Can be used to abbreviate long entries in tables."
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3717
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3718
    |sz|
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3719
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3720
    (sz := self size) <= maxLen ifTrue:[ ^ self ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3721
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3722
    ^ '...' , (self copyFrom:(sz - (maxLen - 4)))
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
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3725
     '12345678901234' contractAtBeginningTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3726
     '123456789012345' contractAtBeginningTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3727
     '1234567890123456' contractAtBeginningTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3728
     'aShortString' contractAtBeginningTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3729
     'aVeryLongNameForAStringThatShouldBeShortened' contractAtBeginningTo:15
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
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3732
    "Modified: / 24-10-2006 / 12:32:13 / cg"
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3733
!
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3734
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3735
contractAtEndTo:maxLen
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3736
    "if the receivers size is less or equal to maxLen, return it.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3737
     Otherwise, return a copy of the receiver, where some characters
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3738
     at the end have been replaced by '...' for a total string length
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3739
     of maxLen. Can be used to abbreviate long entries in tables."
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3740
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3741
    |sz|
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3742
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3743
    (sz := self size) <= maxLen ifTrue:[ ^ self ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3744
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3745
    ^ (self copyTo:maxLen-3),'...'
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3746
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3747
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3748
     '12345678901234' contractAtEndTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3749
     '123456789012345' contractAtEndTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3750
     '1234567890123456' contractAtEndTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3751
     'aShortString' contractAtEndTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3752
     'aVeryLongNameForAStringThatShouldBeShortened' contractAtEndTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3753
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3754
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3755
    "Modified: / 24-10-2006 / 12:32:26 / cg"
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3756
!
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
contractLeftTo:maxLen
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3759
    "if the receivers size is less or equal to maxLen, return it.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3760
     Otherwise, return a copy of the receiver, where some characters
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3761
     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
  3762
     of maxLen.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3763
     Very similar to contractTo:, but better to abbreviate long filename entries,
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3764
     where the right part is of more use than the left."
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3765
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3766
    |sz "{ SmallInteger }"
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3767
     halfSize quarterSize "{ SmallInteger }"
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3768
     leftEnd rightEnd rightStart|
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3769
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3770
    (sz := self size) <= maxLen ifTrue:[ ^ self ].
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
    halfSize := maxLen // 2.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3773
    quarterSize := maxLen // 4.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3774
    leftEnd := quarterSize-1.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3775
    rightEnd := maxLen - leftEnd - 3.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3776
    rightStart := sz - rightEnd + 1.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3777
    ^ (self copyTo:leftEnd),'...',(self copyFrom:rightStart)
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3778
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3779
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3780
     '12345678901234' contractLeftTo:15
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3781
     '123456789012345' contractLeftTo:15
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3782
     '1234567890123456' contractLeftTo:15
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3783
     'aShortString' contractLeftTo:15
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3784
     'aVeryLongNameForAStringThatShouldBeShortened' contractLeftTo:15
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3785
     '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
  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
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3789
contractTo:maxLen
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3790
    "if the receivers size is less or equal to maxLen, return it.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3791
     Otherwise, return a copy of the receiver, where some characters
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3792
     in the middle have been replaced by '...' for a total string length
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3793
     of maxLen. Can be used to abbreviate long entries in tables."
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3794
13362
ee643208df42 changed: #contractTo:
Claus Gittinger <cg@exept.de>
parents: 13344
diff changeset
  3795
    |sz "{ SmallInteger }" leftSize rightSize|
11329
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
    (sz := self size) <= maxLen ifTrue:[ ^ self ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3798
13362
ee643208df42 changed: #contractTo:
Claus Gittinger <cg@exept.de>
parents: 13344
diff changeset
  3799
    rightSize := maxLen // 2.
ee643208df42 changed: #contractTo:
Claus Gittinger <cg@exept.de>
parents: 13344
diff changeset
  3800
    leftSize := maxLen - rightSize.
13822
8c2b90928dd9 contractTo:
Claus Gittinger <cg@exept.de>
parents: 13633
diff changeset
  3801
    leftSize := leftSize - 2.
8c2b90928dd9 contractTo:
Claus Gittinger <cg@exept.de>
parents: 13633
diff changeset
  3802
    rightSize := rightSize - 1.
13362
ee643208df42 changed: #contractTo:
Claus Gittinger <cg@exept.de>
parents: 13344
diff changeset
  3803
    ^ (self copyTo:leftSize),'...',(self copyFrom:(sz+1-rightSize))
ee643208df42 changed: #contractTo:
Claus Gittinger <cg@exept.de>
parents: 13344
diff changeset
  3804
ee643208df42 changed: #contractTo:
Claus Gittinger <cg@exept.de>
parents: 13344
diff changeset
  3805
    "
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3806
     '12345678901234' contractTo:15
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3807
     '123456789012345' contractTo:15
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3808
     '1234567890123456' contractTo:15
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3809
     '12345678901234567' contractTo:15
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3810
     '123456789012345678' contractTo:15
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3811
     'aShortString' contractTo:15
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3812
     'aVeryLongNameForAStringThatShouldBeShortened' contractTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3813
     '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
  3814
     ('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
  3815
     ('1234567890123456789012345678901234567' contractTo:29) size
13362
ee643208df42 changed: #contractTo:
Claus Gittinger <cg@exept.de>
parents: 13344
diff changeset
  3816
    "
ee643208df42 changed: #contractTo:
Claus Gittinger <cg@exept.de>
parents: 13344
diff changeset
  3817
13822
8c2b90928dd9 contractTo:
Claus Gittinger <cg@exept.de>
parents: 13633
diff changeset
  3818
    "Modified (comment): / 24-11-2011 / 19:17:46 / cg"
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3819
!
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3820
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3821
copyReplaceAll:oldElement with:newElement
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3822
    "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
  3823
     have been replaced by newElement."
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3824
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3825
    "/ ANSI seems to allow a sequence to be replaced by another sequence,
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3826
    "/ whereas the old ST80 meant replace all occurrences... - sigh.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3827
    oldElement isByteCollection ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3828
        newElement isByteCollection ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3829
            ^ self copyReplaceString:oldElement withString:newElement.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3830
        ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3831
        self halt:'check if this is legal'.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3832
    ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3833
    newElement isByteCollection ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3834
        self halt:'check if this is legal'.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3835
    ].
16212
da322a6b1d2a class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 16202
diff changeset
  3836
    ^ super copyReplaceAll:oldElement with:newElement
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3837
!
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3838
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3839
copyReplaceString:subString withString:newString
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3840
    "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
  3841
     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
  3842
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3843
    |tmpStream idx idx1|
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3844
15523
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  3845
    tmpStream := self species writeStream.
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3846
    idx := 1.
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3847
    [idx ~~ 0] whileTrue:[
15523
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  3848
        idx1 := idx.
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  3849
        idx := self indexOfSubCollection:subString startingAt:idx.
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  3850
        idx ~~ 0 ifTrue:[
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  3851
            tmpStream nextPutAll:(self copyFrom:idx1 to:idx-1).
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  3852
            tmpStream nextPutAll:newString.
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  3853
            idx := idx + subString size
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  3854
        ]
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3855
    ].
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3856
    tmpStream nextPutAll:(self copyFrom:idx1).
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3857
    ^ tmpStream contents
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3858
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3859
   "
9306
de9b438212b8 comment
Stefan Vogel <sv@exept.de>
parents: 9282
diff changeset
  3860
     '12345678901234567890' copyReplaceString:'123' withString:'OneTwoThree'
de9b438212b8 comment
Stefan Vogel <sv@exept.de>
parents: 9282
diff changeset
  3861
     '12345678901234567890' copyReplaceString:'123' withString:'*'
de9b438212b8 comment
Stefan Vogel <sv@exept.de>
parents: 9282
diff changeset
  3862
     '12345678901234567890' copyReplaceString:'234' withString:'foo'
de9b438212b8 comment
Stefan Vogel <sv@exept.de>
parents: 9282
diff changeset
  3863
de9b438212b8 comment
Stefan Vogel <sv@exept.de>
parents: 9282
diff changeset
  3864
     ('a string with spaces' copyReplaceAll:$  withAll:' foo ')
15523
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  3865
        copyReplaceString:'foo' withString:'bar'
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3866
    "
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3867
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3868
    "Modified: / 31-05-1999 / 12:33:59 / cg"
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3869
    "Created: / 12-05-2004 / 12:00:00 / cg"
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3870
!
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3871
8040
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3872
copyWith:aCharacter
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3873
    "return a new string containing the receivers characters
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3874
     and the single new character, aCharacter.
8040
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3875
     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
  3876
     as argument, but equivalent to copy-and-addLast.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3877
     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
  3878
     (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
  3879
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3880
    |sz newString|
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3881
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3882
    aCharacter bitsPerCharacter > self bitsPerCharacter ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3883
        sz := self size.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3884
        newString := aCharacter stringSpecies new:sz + 1.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3885
        newString replaceFrom:1 to:sz with:self startingAt:1.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3886
        newString at:sz+1 put:aCharacter.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3887
        ^ newString.
8040
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3888
    ].
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3889
    ^ super copyWith:aCharacter
17241
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3890
!
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3891
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3892
restAfter:keyword withoutSeparators:strip
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3893
    "compare the left of the receiver with keyword,
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3894
     if it matches return the right.
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3895
     Finally, if strip is true, remove whiteSpace.
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3896
     This method is used to match and extract lines of the form:
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3897
        something: rest
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3898
     where we are interested in rest, but only if the receiver string
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3899
     begins with something.
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3900
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3901
     You may wonder why such a specialized method exists here
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3902
     - this is so common when processing mailboxes,
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3903
     rcs files, nntp/pop3 responses, that is was considered worth
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3904
     a special method here to avoid having the code below a hundred
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3905
     times in variuos places."
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3906
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3907
    |rest|
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3908
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3909
    (self startsWith:keyword) ifTrue:[
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3910
        rest := self copyFrom:(keyword size + 1).
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3911
        strip ifTrue:[
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3912
            rest := rest withoutSeparators
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3913
        ].
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3914
        ^ rest
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3915
    ].
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3916
    ^ nil
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3917
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3918
    "
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3919
     'foo: hello world' restAfter:'foo:' withoutSeparators:true
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3920
     'funny: something' restAfter:'foo:' withoutSeparators:true
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3921
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3922
     'foo:     hello world    ' restAfter:'foo:' withoutSeparators:true
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3923
     'foo:     hello world    ' restAfter:'foo:' withoutSeparators:false
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3924
    "
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3925
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3926
    "Created: 25.11.1995 / 11:04:18 / cg"
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3927
!
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3928
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3929
splitAtString:subString withoutSeparators:strip
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3930
    "If the receiver is of the form:
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3931
        <left><subString><right>
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3932
     return a collection containing left and right only.
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3933
     If strip is true, remove whiteSpace in the returned substrings."
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3934
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3935
    |idx left right|
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3936
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3937
    (idx := self indexOfSubCollection:subString) ~~ 0 ifTrue:[
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3938
        left := self copyTo:(idx - 1).
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3939
        right := self copyFrom:(idx + subString size).
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3940
        strip ifTrue:[
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3941
            left := left withoutSeparators.
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3942
            right := right withoutSeparators.
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3943
        ].
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3944
        ^ StringCollection with:left with:right
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3945
    ].
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3946
    self error:'substring not present in receiver' mayProceed:true.
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3947
    ^ self
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
    "
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3950
     'hello -> world' splitAtString:'->' withoutSeparators:false  
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3951
     'hello -> world' splitAtString:'->' withoutSeparators:true  
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3952
     'hello -> ' splitAtString:'->' withoutSeparators:true       
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3953
     'hello > error' splitAtString:'->' withoutSeparators:true 
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  3954
    "
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
    "Created: 25.11.1995 / 11:04:18 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3957
! !
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3958
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3959
!CharacterArray methodsFor:'displaying'!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3960
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3961
displayOn:aGC x:x y:y from:start to:stop
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3962
    "display the receiver on a GC"
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3963
12171
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  3964
    self displayOn:aGC x:x y:y from:start to:stop opaque:false
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  3965
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  3966
    "Modified: 12.5.1996 / 12:49:33 / cg"
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  3967
!
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  3968
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  3969
displayOn:aGC x:x y:y from:start to:stop opaque:opaque
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  3970
    "display the receiver on a GC"
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  3971
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3972
    "q&d hack"
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3973
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3974
    (start == 1 and:[stop == self size]) ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3975
        self displayOn:aGC x:x y:y opaque:opaque.
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3976
    ] ifFalse:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3977
        (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
  3978
    ].
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3979
!
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3980
7082
675482728016 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7022
diff changeset
  3981
displayOn:aGc x:x y:y opaque:opaque
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3982
    "display the receiver in a graphicsContext - this method allows
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3983
     strings to be used like DisplayObjects."
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3984
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3985
    |s|
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3986
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3987
    s := self string.
7082
675482728016 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7022
diff changeset
  3988
    opaque ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3989
        aGc displayOpaqueString:s x:x y:y.
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3990
    ] ifFalse:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3991
        aGc displayString:s x:x y:y.
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3992
    ].
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  3993
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  3994
    "Modified: 11.5.1996 / 14:42:48 / cg"
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  3995
!
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  3996
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3997
displayOpaqueOn:aGC x:x y:y from:start to:stop
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3998
    "display the receiver on a GC"
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3999
12171
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  4000
    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
  4001
! !
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  4002
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4003
!CharacterArray methodsFor:'emphasis'!
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4004
11632
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  4005
actionForAll:aBlock
12326
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  4006
    "change the action block of all characters.
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  4007
     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
  4008
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  4009
    ^ self asText actionForAll:aBlock
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  4010
!
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  4011
5732
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  4012
allBold
12326
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  4013
    "return a text object representing the receiver, but all boldified"
5732
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  4014
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4015
    "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
  4016
    Text isNil ifTrue:[^ self].
5732
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  4017
    ^ self asText allBold
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  4018
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  4019
    "
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  4020
     Transcript showCR:'hello' asText allBold
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  4021
     Transcript showCR:'hello' allBold
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  4022
    "
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  4023
!
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  4024
5898
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  4025
allItalic
12326
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  4026
    "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
  4027
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4028
    "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
  4029
    Text isNil ifTrue:[^ self].
5898
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  4030
    ^ self asText allItalic
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  4031
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  4032
    "
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  4033
     Transcript showCR:'hello' asText allItalic
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  4034
     Transcript showCR:'hello' allItalic
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  4035
    "
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  4036
!
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  4037
11345
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  4038
allStrikedOut
12326
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  4039
    "return a text object representing the receiver, but all in strikeout"
11345
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  4040
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  4041
    "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
  4042
    Text isNil ifTrue:[^ self].
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  4043
    ^ self asText allStrikedOut
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  4044
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  4045
    "
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  4046
     Transcript showCR:'hello' asText allStrikedOut
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  4047
     Transcript showCR:'hello' allStrikedOut
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  4048
    "
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  4049
!
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  4050
10862
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  4051
allUnderlined
12326
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  4052
    "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
  4053
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  4054
    "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
  4055
    Text isNil ifTrue:[^ self].
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  4056
    ^ self asText allUnderlined
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  4057
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  4058
    "
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  4059
     Transcript showCR:'hello' asText allUnderlined
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  4060
     Transcript showCR:'hello' allUnderlined
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  4061
    "
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  4062
!
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  4063
6228
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  4064
colorizeAllWith:aColor
12326
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  4065
    "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
  4066
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  4067
    "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
  4068
    Text isNil ifTrue:[^ self].
6228
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  4069
    ^ self asText colorizeAllWith:aColor
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  4070
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  4071
    "
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  4072
     Transcript showCR:('hello' colorizeAllWith:Color red)
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  4073
     Transcript showCR:('world' colorizeAllWith:Color green darkened)
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  4074
    "
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  4075
!
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  4076
12330
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  4077
colorizeAllWith:fgColor on:bgColor
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  4078
    "return a text object representing the receiver, but all colorized with
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  4079
     both fg and background color"
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  4080
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  4081
    "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
  4082
    Text isNil ifTrue:[^ self].
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  4083
    ^ self asText colorizeAllWith:fgColor on:bgColor
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  4084
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  4085
    "
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  4086
     Transcript showCR:('hello' colorizeAllWith:Color red on:Color yellow)
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  4087
     Transcript showCR:('world' colorizeAllWith:Color red)
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  4088
    "
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  4089
!
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  4090
1396
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  4091
emphasis
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  4092
    "return the emphasis.
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  4093
     Since characterArrays do not hold any emphasis information,
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  4094
     nil (no emphasis) is returned here."
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  4095
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  4096
    ^ RunArray new:self size withAll:nil
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  4097
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  4098
    "Created: 14.5.1996 / 13:58:58 / cg"
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  4099
!
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  4100
6655
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  4101
emphasis:emphasisCollection
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  4102
    ^ self asText emphasis:emphasisCollection
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  4103
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  4104
    "
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  4105
     Transcript showCR:('hello' emphasis:#(bold bold bold bold bold))
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  4106
    "
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  4107
!
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  4108
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4109
emphasisAt:characterIndex
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4110
    "return the emphasis at some index.
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4111
     Since characterArrays do not hold any emphasis information,
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4112
     nil (no emphasis) is returned here."
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4113
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4114
    ^ nil
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4115
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4116
    "Created: 11.5.1996 / 14:13:27 / cg"
1396
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  4117
!
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  4118
11632
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  4119
emphasisAtPoint:aPoint on:aGC
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  4120
    "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
  4121
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  4122
    ^ nil
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  4123
!
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  4124
1396
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  4125
emphasisCollection
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  4126
    "return the emphasis.
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  4127
     Since characterArrays do not hold any emphasis information,
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  4128
     nil (no emphasis) is returned here."
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  4129
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  4130
    ^ RunArray new:(self size)
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  4131
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  4132
    "Created: 14.5.1996 / 13:58:58 / cg"
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  4133
    "Modified: 14.5.1996 / 15:02:29 / cg"
3404
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  4134
!
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  4135
11919
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4136
emphasiseFrom:start to:stop with:newEmphasis
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4137
    "set to the emphasis within some range. return the receiver"
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4138
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4139
    ^ self asText emphasiseFrom:start to:stop with:newEmphasis
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4140
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4141
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  4142
     'hello' emphasiseFrom:2 with:#italic
11919
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4143
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4144
     Transcript showCR:('hello' emphasiseFrom:2 with:#italic)
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4145
    "
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4146
!
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4147
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4148
emphasiseFrom:start with:newEmphasis
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4149
    "set to the emphasis within some range. return the receiver"
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4150
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4151
    ^ self emphasiseFrom:start to:(self size) with:newEmphasis
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4152
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4153
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  4154
     'hello' emphasiseFrom:2 with:#italic
11919
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4155
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4156
     Transcript showCR:('hello' emphasiseFrom:2 with:#italic)
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4157
    "
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4158
!
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4159
3404
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  4160
emphasizeAllWith:emphasis
12326
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  4161
    "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
  4162
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  4163
    "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
  4164
    Text isNil ifTrue:[^ self].
3404
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  4165
    ^ self asText emphasizeAllWith:emphasis
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  4166
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  4167
    "
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  4168
     Transcript showCR:('hello' emphasizeAllWith:#bold)
3599
fea09a812f55 comment
Claus Gittinger <cg@exept.de>
parents: 3578
diff changeset
  4169
     Transcript showCR:('hello' emphasizeAllWith:(#color -> Color red))
fea09a812f55 comment
Claus Gittinger <cg@exept.de>
parents: 3578
diff changeset
  4170
     Transcript showCR:('hello' emphasizeAllWith:(#color -> Color red))
fea09a812f55 comment
Claus Gittinger <cg@exept.de>
parents: 3578
diff changeset
  4171
    "
fea09a812f55 comment
Claus Gittinger <cg@exept.de>
parents: 3578
diff changeset
  4172
fea09a812f55 comment
Claus Gittinger <cg@exept.de>
parents: 3578
diff changeset
  4173
    "Modified: / 17.6.1998 / 12:51:44 / cg"
5097
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  4174
!
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  4175
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  4176
makeSelectorBoldIn:aClass
14050
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4177
    "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
  4178
     Change myself to boldify the selector.
14050
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4179
     Not yet implemented (could easily use the syntaxHighlighter for this ...).
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4180
     For protocol compatibility with other smalltalks"
5097
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  4181
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  4182
    ^ self
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  4183
14050
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4184
    "Created: / 13-12-1999 / 21:49:24 / cg"
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4185
!
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4186
16697
c462faf821b7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16693
diff changeset
  4187
withColor:aColor
c462faf821b7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16693
diff changeset
  4188
    "return a text object representing the receiver, but all colorized"
c462faf821b7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16693
diff changeset
  4189
c462faf821b7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16693
diff changeset
  4190
    ^ self colorizeAllWith:aColor
c462faf821b7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16693
diff changeset
  4191
c462faf821b7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16693
diff changeset
  4192
    "
c462faf821b7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16693
diff changeset
  4193
     Transcript showCR:('hello' withColor:Color red)
c462faf821b7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16693
diff changeset
  4194
     Transcript showCR:('world' withColor:Color green darkened)
c462faf821b7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16693
diff changeset
  4195
    "
c462faf821b7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16693
diff changeset
  4196
!
c462faf821b7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16693
diff changeset
  4197
14050
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4198
withoutAnyColorEmphasis
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4199
    "for protocol compatibility with Text"
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4200
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4201
    ^ self
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4202
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4203
    "Created: / 06-03-2012 / 18:15:38 / cg"
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4204
!
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4205
12396
0f75aad3a34c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12343
diff changeset
  4206
withoutBackgroundColorEmphasis
14050
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4207
    "for protocol compatibility with Text"
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4208
12396
0f75aad3a34c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12343
diff changeset
  4209
    ^ self
14050
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4210
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4211
    "Modified (comment): / 06-03-2012 / 18:14:27 / cg"
12396
0f75aad3a34c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12343
diff changeset
  4212
!
0f75aad3a34c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12343
diff changeset
  4213
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4214
withoutEmphasis:emphasisToRemove
14050
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4215
    "for protocol compatibility with Text"
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4216
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4217
    ^ self
14050
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4218
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4219
    "Modified (comment): / 06-03-2012 / 18:14:29 / cg"
12396
0f75aad3a34c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12343
diff changeset
  4220
!
0f75aad3a34c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12343
diff changeset
  4221
0f75aad3a34c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12343
diff changeset
  4222
withoutForegroundColorEmphasis
14050
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4223
    "for protocol compatibility with Text"
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4224
12396
0f75aad3a34c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12343
diff changeset
  4225
    ^ self
14050
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4226
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4227
    "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
  4228
! !
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4229
7265
3b007758ff5b method category rename
Claus Gittinger <cg@exept.de>
parents: 7261
diff changeset
  4230
!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
  4231
17625
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4232
basicUtf8Encoded
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4233
    "Return my UTF-8 representation as a new String"
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4234
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4235
    "We already know, that we need more space, just a rough estimation"
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4236
    |sz s|
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4237
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4238
    sz := self size.
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4239
    s := WriteStream on:(String uninitializedNew:(sz+2+(sz//3))).
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4240
    s nextPutAllUtf8:self.
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4241
    ^ s contents
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4242
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4243
    "
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4244
     'abcde1234' basicUtf8Encoded
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4245
     'abcdeäöüß' basicUtf8Encoded
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4246
    "
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4247
!
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4248
12767
17d2c7268065 Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12679
diff changeset
  4249
decodeAsLiteralArray
17d2c7268065 Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12679
diff changeset
  4250
    "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
  4251
     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
  4252
     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
  4253
17d2c7268065 Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12679
diff changeset
  4254
    ^ self
17d2c7268065 Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12679
diff changeset
  4255
!
17d2c7268065 Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12679
diff changeset
  4256
991
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
  4257
decodeFrom:encodingSymbol
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4258
    "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
  4259
     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
  4260
ca774158b317 code cleanup (removed old obsolete encoding stuff)
Claus Gittinger <cg@exept.de>
parents: 8102
diff changeset
  4261
    |myEncoding encoder|
7950
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  4262
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  4263
    encodingSymbol isNil ifTrue:[^ self].
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  4264
    myEncoding := self encoding.
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  4265
    encodingSymbol == myEncoding ifTrue:[^ self].
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  4266
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  4267
    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
  4268
    encoder isNil ifTrue:[^ self].
ca774158b317 code cleanup (removed old obsolete encoding stuff)
Claus Gittinger <cg@exept.de>
parents: 8102
diff changeset
  4269
    ^ 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
  4270
!
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
  4271
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4272
encodeFrom:oldEncoding into:newEncoding
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4273
    ^ CharacterEncoder encodeString:self from:oldEncoding into:newEncoding
14405
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  4274
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  4275
    "
17600
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  4276
     'äüö' encodeFrom:#iso8859 into:#utf8
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  4277
     ('äüö' encodeFrom:#iso8859 into:#utf8) encodeFrom:#utf8 into:#unicode
14405
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  4278
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4279
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4280
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4281
rot13
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4282
     "Usenet: from `rotate alphabet 13 places']
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4283
      The simple Caesar-cypher encryption that replaces each English
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4284
      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
  4285
      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
  4286
      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
  4287
      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
  4288
      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
  4289
      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
  4290
      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
  4291
11865
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4292
    ^ self rot:13
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4293
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4294
    "
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4295
     'hello world' rot13
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4296
     'hello world' rot13 rot13
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4297
    "
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4298
!
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4299
11865
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4300
rot:n
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4301
     "Usenet: from `rotate alphabet N places']
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4302
      The simple Caesar-cypher encryption that replaces each English
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4303
      letter with the one N places forward or back along the alphabet,
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4304
      so that 'The butler did it!!' becomes 'Gur ohgyre qvq vg!!' by rot 13
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4305
      Most Usenet news reading and posting programs include a rot13 feature.
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4306
      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
  4307
      to open -- e.g., for posting things that might offend some readers, or spoilers.
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4308
      A major advantage of rot13 over rot(N) for other N is that it
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4309
      is self-inverse, so the same code can be used for encoding and decoding."
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4310
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4311
    ^ self species
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4312
        streamContents:[:aStream |
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4313
            self do:[:char |
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4314
                aStream nextPut:(char rot:n) ]]
11865
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4315
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4316
    "
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4317
     'hello world' rot:13
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4318
     ('hello world' rot:13) rot:13
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4319
    "
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4320
!
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4321
15656
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4322
utf16Encoded
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4323
    "Return my UTF-16 representation as a new TwoByteString"
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4324
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4325
    |s|
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4326
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4327
    s := WriteStream on:(TwoByteString uninitializedNew:self size).
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4328
    s nextPutAllUtf16:self.
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4329
    ^ s contents
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4330
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4331
    "
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4332
     'abcde1234' utf16Encoded
17600
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  4333
     'abcdeäöüß' utf16Encoded
15656
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4334
    "
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4335
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4336
    "Modified: / 11-05-2010 / 19:12:37 / cg"
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4337
!
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4338
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4339
utf8Decoded
7950
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  4340
    "Interpreting myself as an UTF-8 representation, decode and return the decoded string."
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4341
14592
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  4342
    |in out|
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  4343
14606
1aaaa6d79e54 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14592
diff changeset
  4344
    (self isWideString or:[self contains8BitCharacters]) ifFalse:[
14592
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  4345
        "speed up common case"
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  4346
        ^ self.
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  4347
    ].
11326
11ce7ae19315 changed #utf8Decoded - use CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 11320
diff changeset
  4348
    out := CharacterWriteStream on:(String uninitializedNew:self size).
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4349
    in := self readStream.
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4350
    [in atEnd] whileFalse:[
14592
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  4351
        out nextPut:(Character utf8DecodeFrom:in).
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4352
    ].
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4353
    ^ out contents
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4354
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4355
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4356
     #[16rC8 16rA0] asString utf8Decoded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4357
     (Character value:16r220) utf8Encoded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4358
     (Character value:16r220) utf8Encoded utf8Decoded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4359
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4360
     (Character value:16r800) utf8Encoded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4361
     (Character value:16r220) utf8Encoded utf8Decoded
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4362
    "
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4363
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4364
    "test:
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4365
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4366
      |utf8Encoding original readBack|
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4367
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4368
      1 to:16rFFFF do:[:ascii |
14592
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  4369
        original := (Character value:ascii) asString.
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  4370
        utf8Encoding := original utf8Encoded.
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  4371
        readBack := utf8Encoding utf8Decoded.
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  4372
        readBack = original ifFalse:[
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  4373
            self halt
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  4374
        ]
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4375
      ]
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4376
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4377
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4378
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4379
utf8DecodedWithTwoByteCharactersReplacedBy:replacementCharacter
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4380
    "Interpreting myself as an UTF-8 representation, decode and return
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4381
     the decoded string. Suppress all 2-byte (above 16rFF) characters,
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4382
     and replace them with replacementCharacter"
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4383
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4384
    |in out c|
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4385
8222
f2c454a9a038 replaced '' writeStream by String writeStream
Claus Gittinger <cg@exept.de>
parents: 8124
diff changeset
  4386
    out := WriteStream on:(String uninitializedNew:self size).
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4387
    in := self readStream.
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4388
    [in atEnd] whileFalse:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4389
        c := Character utf8DecodeFrom:in.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4390
        c codePoint > 16rFF ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4391
            c := replacementCharacter
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4392
        ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4393
        out nextPut:c.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4394
    ].
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4395
    ^ out contents
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4396
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4397
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4398
     (Character value:16r220) utf8Encoded
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4399
        utf8DecodedWithTwoByteCharactersReplacedBy:(Character space)
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4400
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4401
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4402
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4403
utf8Encoded
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4404
    "Return my UTF-8 representation as a new String"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4405
17625
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4406
    |string|
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4407
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4408
    string := self string.
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4409
    string ~~ self ifTrue:[
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4410
        ^ string utf8Encoded.
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4411
    ].
14592
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  4412
14606
1aaaa6d79e54 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14592
diff changeset
  4413
    (self isWideString or:[self contains8BitCharacters]) ifFalse:[
14592
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  4414
        "speed up common case"
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  4415
        ^ self.
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  4416
    ].
17625
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4417
    ^ self basicUtf8Encoded.
11320
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  4418
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  4419
    "
14592
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  4420
     'abcde1234' utf8Encoded
17600
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  4421
     'abcdeäöüß' utf8Encoded
12925
5c0a9a633ca1 comment/format in: #utf8Encoded
Claus Gittinger <cg@exept.de>
parents: 12912
diff changeset
  4422
    "
5c0a9a633ca1 comment/format in: #utf8Encoded
Claus Gittinger <cg@exept.de>
parents: 12912
diff changeset
  4423
5c0a9a633ca1 comment/format in: #utf8Encoded
Claus Gittinger <cg@exept.de>
parents: 12912
diff changeset
  4424
    "Modified: / 11-05-2010 / 19:12:37 / cg"
17625
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4425
!
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4426
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4427
utf8EncodedOn:aStream
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4428
    "write to aStream in utf8 encoding"
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4429
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4430
    |string|
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4431
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4432
    string := self string.
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4433
    string ~~ self ifTrue:[
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4434
        ^ string utf8EncodedOn:aStream.
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4435
    ].
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4436
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4437
    (self isWideString or:[self contains8BitCharacters]) ifFalse:[
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4438
        "speed up common case"
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4439
        aStream nextPutAll:self.
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4440
    ].
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4441
    aStream nextPutAllUtf8:self.
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4442
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4443
    "
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4444
     'abcde1234' utf8EncodedOn:('' writeStream)
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4445
     'abcdeäöüß' utf8EncodedOn:('' writeStream)
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  4446
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4447
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4448
11345
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  4449
18269
77a84c6693c8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18194
diff changeset
  4450
77a84c6693c8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18194
diff changeset
  4451
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4452
!CharacterArray methodsFor:'matching - glob expressions'!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4453
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4454
compoundMatch:aString
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4455
    "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
  4456
     consisting of multiple simple GLOB patterns, separated by semicolons.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4457
     This is usable with fileName pattern fields.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4458
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4459
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4460
             NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4461
     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
  4462
     NOTICE: the receiver is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4463
15890
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4464
    ^ self compoundMatch:aString caseSensitive:true withoutSeparators:false
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4465
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4466
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4467
     'f*' match:'foo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4468
     'b*' match:'foo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4469
     'f*;b*' match:'foo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4470
     'f*;b*' match:'bar'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4471
     'f*;b*' compoundMatch:'foo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4472
     'f*;b*' compoundMatch:'bar'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4473
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4474
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4475
    "Modified: / 30.1.1998 / 11:40:18 / stefan"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4476
    "Modified: / 16.12.1999 / 01:22:08 / cg"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4477
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4478
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4479
compoundMatch:aString caseSensitive:caseSensitive
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4480
    "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
  4481
     consisting of multiple simple GLOB patterns, separated by semicolons.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4482
     This is usable with fileName pattern fields.
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
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4485
             NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4486
     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
  4487
     NOTICE: the receiver is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4488
15890
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4489
    ^self compoundMatch:aString caseSensitive:caseSensitive withoutSeparators:false
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4490
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4491
    "
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4492
     'f*' match:'foo'
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4493
     'b*' match:'foo'
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4494
     'f*;b*' match:'foo'
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4495
     'f*;b*' match:'bar'
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4496
     'f*;b*' compoundMatch:'foo'
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4497
     'f*;b*' compoundMatch:'bar'
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4498
     'f*;b*' compoundMatch:'Foo' caseSensitive:false
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4499
     'f*;b*' compoundMatch:'Bar' caseSensitive:false
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4500
     'f*;b*' compoundMatch:'ccc' caseSensitive:false
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4501
    "
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4502
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4503
    "Modified: / 15.4.1997 / 15:50:33 / cg"
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4504
    "Modified: / 30.1.1998 / 11:40:18 / stefan"
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4505
    "Created: / 16.12.1999 / 01:21:35 / cg"
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4506
!
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4507
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4508
compoundMatch:aString caseSensitive:caseSensitive withoutSeparators:withoutSeparators
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4509
    "like match, but the receiver may be a compound match pattern,
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4510
     consisting of multiple simple GLOB patterns, separated by semicolons.
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4511
     If withoutSeparators is true, spaces around individual patterns are stripped off.
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4512
     This is usable with fileName pattern fields.
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4513
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4514
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4515
             NOT the ST-80 meaning.
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4516
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4517
     NOTICE: the receiver is the match pattern"
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4518
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4519
    |matchers|
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4520
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4521
    matchers := self asCollectionOfSubstringsSeparatedBy:$;.
15890
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4522
    withoutSeparators ifTrue:[ matchers := matchers collect:[:each | each withoutSeparators] ].
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4523
    ^ matchers 
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4524
        contains:[:aPattern |
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4525
            aPattern match:aString ignoreCase:caseSensitive not escapeCharacter:nil
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4526
        ].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4527
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4528
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4529
     'f*' match:'foo'
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4530
     'b*' match:'foo'
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4531
     'f*;b*' match:'foo'
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4532
     'f*;b*' match:'bar'
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4533
     'f*;b*' compoundMatch:'foo'
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4534
     'f*;b*' compoundMatch:'bar'
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4535
     'f*;b*' compoundMatch:'Foo' caseSensitive:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4536
     'f*;b*' compoundMatch:'Bar' caseSensitive:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4537
     'f*;b*' compoundMatch:'ccc' caseSensitive:false
15890
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4538
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4539
     'f* ; b*' compoundMatch:'foo' 
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4540
     'f* ; b*' compoundMatch:'foo' caseSensitive:true withoutSeparators:true
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4541
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4542
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4543
    "Modified: / 15.4.1997 / 15:50:33 / cg"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4544
    "Modified: / 30.1.1998 / 11:40:18 / stefan"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4545
    "Created: / 16.12.1999 / 01:21:35 / cg"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4546
!
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4547
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4548
compoundMatch:aString ignoreCase:ignoreCase
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4549
    <resource: #obsolete>
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4550
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4551
    "like match, but the receiver may be a compound match pattern,
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4552
     consisting of multiple simple GLOB patterns, separated by semicolons.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4553
     This is usable with fileName pattern fields.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4554
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4555
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4556
             NOT the ST-80 meaning.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4557
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4558
     NOTICE: the receiver is the match pattern"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4559
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4560
    ^ self compoundMatch:aString caseSensitive:ignoreCase not
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4561
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4562
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4563
     'f*' match:'foo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4564
     'b*' match:'foo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4565
     'f*;b*' match:'foo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4566
     'f*;b*' match:'bar'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4567
     'f*;b*' compoundMatch:'foo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4568
     'f*;b*' compoundMatch:'bar'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4569
     'f*;b*' compoundMatch:'Foo' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4570
     'f*;b*' compoundMatch:'Bar' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4571
     'f*;b*' compoundMatch:'ccc' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4572
    "
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
    "Modified: / 15.4.1997 / 15:50:33 / cg"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4575
    "Modified: / 30.1.1998 / 11:40:18 / stefan"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4576
    "Created: / 16.12.1999 / 01:21:35 / cg"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4577
!
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
findMatchString:matchString
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4580
    "like findString/indexOfSubCollection, but allowing GLOB match patterns.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4581
     find matchstring; if found, return the index;
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4582
     if not found, return 0.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4583
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4584
     NOTICE: match-meta character interpretation is like in unix-matching,
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4585
             NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4586
     NOTICE: this GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4587
     NOTICE: the argument is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4588
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4589
    ^ self findMatchString:matchString startingAt:1 ignoreCase:false ifAbsent:0
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4590
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4591
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4592
findMatchString:matchString startingAt:index
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4593
    "like findString, but allowing GLOB match patterns.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4594
     find matchstring, starting at index. if found, return the index;
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4595
     if not found, return 0.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4596
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4597
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4598
             NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4599
     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
  4600
     NOTICE: the argument is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4601
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4602
    ^ self findMatchString:matchString startingAt:index ignoreCase:false ifAbsent:0
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4603
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4604
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4605
findMatchString:matchString startingAt:index caseSensitive:caseSensitive ifAbsent:exceptionBlock
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4606
    "like findString, but allowing GLOB match patterns.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4607
     find matchstring, starting at index. if found, return the index;
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4608
     if not found, return the result of evaluating exceptionBlock.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4609
     This is a q&d hack - not very efficient.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4610
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4611
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
14420
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4612
             NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4613
     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
  4614
     NOTICE: the argument is the match pattern"
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
    |firstChar firstSet
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4617
     startIndex "{ Class: SmallInteger }"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4618
     matchSize  "{ Class: SmallInteger }"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4619
     mySize     "{ Class: SmallInteger }"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4620
     realMatchString lcChar ucChar|
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4621
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4622
    matchSize := matchString size.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4623
    matchSize == 0 ifTrue:[^ index]. "empty string matches"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4624
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4625
    realMatchString := matchString.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4626
    (realMatchString endsWith:$*) ifFalse:[
14420
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4627
        realMatchString := realMatchString , '*'.
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4628
        matchSize := matchSize + 1
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4629
    ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4630
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4631
    mySize := self size.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4632
    firstChar := realMatchString at:1.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4633
    firstChar == self class matchEscapeCharacter ifTrue:[
14420
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4634
        firstChar := realMatchString at:2.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4635
    ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4636
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4637
    firstChar asString includesMatchCharacters ifTrue:[
14420
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4638
        index to:mySize do:[:col |
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4639
            (realMatchString match:self from:col to:mySize caseSensitive:caseSensitive)
14420
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4640
            ifTrue:[^ col]
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4641
        ].
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4642
        ^ exceptionBlock value.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4643
    ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4644
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4645
    lcChar := firstChar asLowercase.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4646
    ucChar := firstChar asUppercase.
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4647
    (caseSensitive not and:[ lcChar ~= ucChar ]) ifTrue:[
14420
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4648
        firstSet := Array with:ucChar with:lcChar.
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4649
        startIndex := self indexOfAny:firstSet startingAt:index.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4650
    ] ifFalse:[
14420
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4651
        startIndex := self indexOf:firstChar startingAt:index.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4652
    ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4653
    [startIndex == 0] whileFalse:[
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4654
        (realMatchString match:self from:startIndex to:mySize caseSensitive:caseSensitive)
14420
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4655
        ifTrue:[^ startIndex].
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4656
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4657
        firstSet notNil ifTrue:[
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4658
            startIndex := self indexOfAny:firstSet startingAt:(startIndex + 1).
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4659
        ] ifFalse:[
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4660
            startIndex := self indexOf:firstChar startingAt:(startIndex + 1).
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4661
        ].
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4662
    ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4663
    ^ exceptionBlock value
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
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4666
     'one two three four' findMatchString:'o[nu]'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4667
     'one two three four' findMatchString:'o[nu]' startingAt:3
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4668
     '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
  4669
     '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
  4670
     '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
  4671
     '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
  4672
      12345678901234567890
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4673
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4674
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4675
    "Modified: 13.9.1997 / 06:31:22 / cg"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4676
!
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4677
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4678
findMatchString:matchString startingAt:index ignoreCase:ignoreCase ifAbsent:exceptionBlock
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4679
    <resource: #obsolete>
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4680
    "like findString, but allowing GLOB match patterns.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4681
     find matchstring, starting at index. if found, return the index;
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4682
     if not found, return the result of evaluating exceptionBlock.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4683
     This is a q&d hack - not very efficient.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4684
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4685
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4686
             NOT the ST-80 meaning.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4687
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4688
     NOTICE: the argument is the match pattern"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4689
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4690
    ^ self 
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4691
        findMatchString:matchString startingAt:index caseSensitive:ignoreCase not ifAbsent:exceptionBlock
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4692
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4693
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4694
     'one two three four' findMatchString:'o[nu]'
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4695
     'one two three four' findMatchString:'o[nu]' startingAt:3
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4696
     '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
  4697
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4698
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4699
    "Modified: 13.9.1997 / 06:31:22 / cg"
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
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4702
includesMatchString:matchString
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4703
    "like includesString, but allowing GLOB match patterns.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4704
     find matchstring; if found, return true, otherwise return false.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4705
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4706
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4707
             NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4708
     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
  4709
     NOTICE: the argument is the match pattern"
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
    ^ (self findMatchString:matchString) ~~ 0
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4712
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4713
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4714
     'hello world' includesMatchString:'h*'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4715
     'hello world' includesMatchString:'h[aeiou]llo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4716
     'hello world' includesMatchString:'wor*'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4717
     'hello world' includesMatchString:'woR*'
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
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4720
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4721
includesMatchString:matchString caseSensitive:caseSensitive
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4722
    "like includesString, but allowing GLOB match patterns.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4723
     find matchstring; if found, return true, otherwise return false.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4724
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4725
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4726
             NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4727
     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
  4728
     NOTICE: the argument is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4729
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4730
    ^ (self findMatchString:matchString startingAt:1 ignoreCase:caseSensitive not ifAbsent:0) ~~ 0
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4731
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4732
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4733
     'hello world' includesMatchString:'h*' caseSensitive:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4734
     'hello world' includesMatchString:'h*' caseSensitive:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4735
     'Hello world' includesMatchString:'h*' caseSensitive:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4736
     'Hello world' includesMatchString:'h*' caseSensitive:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4737
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4738
     'hello world' includesMatchString:'h[aeiou]llo' caseSensitive:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4739
     'hello world' includesMatchString:'h[aeiou]llo' caseSensitive:false
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
     'hello world' includesMatchString:'wor*' caseSensitive:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4742
     'hello world' includesMatchString:'wor*' caseSensitive:false
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
     'hello world' includesMatchString:'woR*' caseSensitive:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4745
     'hello world' includesMatchString:'woR*' caseSensitive:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4746
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4747
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4748
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4749
match:aString
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4750
    "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
  4751
     characters $* (to match any string) or $# (to match any character).
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4752
     or [...] to match a set of characters.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4753
     Lower/uppercase are considered different.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4754
     The escape character is the backQuote.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4755
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4756
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4757
             NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4758
     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
  4759
     NOTICE: the receiver is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4760
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4761
    ^ self match:aString from:1 to:aString size caseSensitive:true
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4762
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4763
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4764
     '\*f*' match:'f'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4765
     '\*f*' match:'*f'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4766
     '*\*f*' match:'*f'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4767
     '*f*' match:'*f'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4768
     '*ute*' match:'computer'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4769
     '*uter' match:'computer'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4770
     'uter*' match:'computer'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4771
     '*ute*' match:''
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4772
     '[abcd]*' match:'computer'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4773
     '[abcd]*' match:'komputer'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4774
     '*some*compl*ern*' match:'this is some more complicated pattern match'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4775
     '*some*compl*ern*' match:'this is another complicated pattern match'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4776
     '*-hh' match:'anton-h'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4777
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4778
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4779
    "Modified: / 9.6.1998 / 18:50:00 / cg"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4780
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4781
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4782
match:aString caseSensitive:caseSensitive
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4783
    "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
  4784
     characters $* (to match any string) or $# (to match any character)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4785
     or [...] to match a set of characters.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4786
     If caseSensitive is false, lower/uppercase are considered the same.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4787
     The escape character is the backQuote.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4788
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4789
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4790
             NOT the ST-80 meaning.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4791
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4792
     NOTICE: the receiver is the match pattern"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4793
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4794
    ^ self match:aString from:1 to:aString size caseSensitive:caseSensitive
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4795
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
     '*ute*' match:'COMPUTER' caseSensitive:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4798
     '*uter' match:'COMPUTER' caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4799
     '[abcd]*' match:'computer' caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4800
     '[abcd]*' match:'Computer' caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4801
     '[a-k]*' match:'komputer' caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4802
     '[a-k]*' match:'zomputer' caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4803
     '[a-k]*' match:'Komputer' caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4804
     '[a-k]*' match:'Komputer' caseSensitive:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4805
     '*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
  4806
     '*some*compl*ern*' match:'this is another complicated pattern match' caseSensitive:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4807
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4808
     Time millisecondsToRun:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4809
        Symbol allInstancesDo:[:sym |
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4810
            '[ab]*' match:sym caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4811
        ]
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4812
     ].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4813
     Time millisecondsToRun:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4814
        Symbol allInstancesDo:[:sym |
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4815
            '*at:*' match:sym caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4816
        ]
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4817
     ].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4818
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4819
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4820
    "Modified: 2.4.1997 / 17:28:58 / cg"
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
match:aString caseSensitive:caseSensitive escapeCharacter:escape
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4824
    "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
  4825
     characters $* (to match any string) or $# (to match any character)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4826
     or [...] to match a set of characters.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4827
     If caseSensitive is false, lower/uppercase are considered the same.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4828
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4829
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4830
             NOT the ST-80 meaning.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4831
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4832
     NOTICE: the receiver is the match pattern"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4833
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4834
    ^ self match:aString from:1 to:aString size caseSensitive:caseSensitive escapeCharacter:escape
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4835
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4836
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4837
     '*ute*' match:'COMPUTER' caseSensitive:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4838
     '*uter' match:'COMPUTER' caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4839
     '[abcd]*' match:'computer' caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4840
     '[abcd]*' match:'Computer' caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4841
     '[a-k]*' match:'komputer' caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4842
     '[a-k]*' match:'zomputer' caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4843
     '[a-k]*' match:'Komputer' caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4844
     '[a-k]*' match:'Komputer' caseSensitive:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4845
     '*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
  4846
     '*some*compl*ern*' match:'this is another complicated pattern match' caseSensitive:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4847
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4848
     Time millisecondsToRun:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4849
        Symbol allInstancesDo:[:sym |
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4850
            '[ab]*' match:sym caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4851
        ]
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
     Time millisecondsToRun:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4854
        Symbol allInstancesDo:[:sym |
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4855
            '*at:*' match:sym caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4856
        ]
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
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4859
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4860
    "Modified: 2.4.1997 / 17:28:58 / cg"
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
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4863
match:aString escapeCharacter:escape
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4864
    "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
  4865
     characters $* (to match any string) or $# (to match any character).
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4866
     or [...] to match a set of characters.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4867
     Lower/uppercase are considered different.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4868
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4869
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4870
             NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4871
     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
  4872
     NOTICE: the receiver is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4873
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4874
    ^ self match:aString from:1 to:aString size ignoreCase:false escapeCharacter:escape
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4875
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4876
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4877
     'a\b\c\*' match:'a\b\c\d'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4878
     'a\b\c\*' match:'a\b\c\d' escapeCharacter:nil
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4879
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4880
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4881
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4882
match:aString from:start to:stop caseSensitive:caseSensitive
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4883
    "return true if part of aString matches myself,
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4884
     where self may contain GLOB meta-match
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4885
     characters $* (to match any string) or $# (to match any character)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4886
     or [...] to match a set of characters.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4887
     If caseSensitive is false, lower/uppercase are considered the same.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4888
     The escape character is the backQuote.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4889
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4890
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4891
             NOT the ST-80 meaning.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4892
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4893
     NOTICE: the receiver is the match pattern"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4894
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4895
    ^ self
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4896
        match:aString from:start to:stop caseSensitive:caseSensitive
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4897
        escapeCharacter:(self class matchEscapeCharacter)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4898
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4899
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4900
     '*ute*' match:'12345COMPUTER' from:1 to:5 caseSensitive:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4901
     '*ute*' match:'12345COMPUTER' from:6 to:13 caseSensitive:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4902
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4903
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4904
    "Modified: / 10.11.1998 / 21:43:46 / cg"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4905
!
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4906
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4907
match:aString from:start to:stop caseSensitive:caseSensitive escapeCharacter:escape
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4908
    "return true if part of aString matches myself,
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4909
     where self may contain GLOB meta-match
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4910
     characters $* (to match any string) or $# (to match any character)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4911
     or [...] to match a set of characters.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4912
     If caseSensitive is false, lower/uppercase are considered the same.
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
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4915
             NOT the ST-80 meaning.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4916
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4917
     NOTICE: the receiver is the match pattern"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4918
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4919
    |matchScanArray|
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4920
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4921
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4922
     keep the matchScanArray from the most recent match -
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4923
     avoids parsing the pattern over-and over if multiple searches
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4924
     are done with the same pattern.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4925
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4926
    (PreviousMatch notNil
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4927
    and:[PreviousMatch key = self]) ifTrue:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4928
        matchScanArray := PreviousMatch value
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4929
    ] ifFalse:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4930
        matchScanArray := self class matchScanArrayFrom:self escapeCharacter:escape.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4931
        matchScanArray isNil ifTrue:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4932
            'CharacterArray [info]: invalid matchpattern:''' infoPrint. self infoPrint. ''' comparing for equality.' infoPrintCR.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4933
            ^ self = aString
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4934
"/            ^ false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4935
        ].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4936
        PreviousMatch := self -> matchScanArray.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4937
    ].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4938
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4939
    ^ self class
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4940
        matchScan:matchScanArray
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4941
        from:1 to:matchScanArray size
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4942
        with:aString
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4943
        from:start to:stop
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4944
        caseSensitive:caseSensitive
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4945
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4946
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4947
     '*ute*' match:'12345COMPUTER' from:1 to:5 caseSensitive:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4948
     '*ute*' match:'12345COMPUTER' from:6 to:13 caseSensitive:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4949
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4950
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4951
    "Modified: / 10.11.1998 / 21:43:46 / cg"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4952
!
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4953
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4954
match:aString from:start to:stop ignoreCase:ignoreCase
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4955
    <resource: #obsolete>
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4956
    "return true if part of aString matches myself,
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4957
     where self may contain GLOB meta-match
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4958
     characters $* (to match any string) or $# (to match any character)
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4959
     or [...] to match a set of characters.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4960
     If ignoreCase is true, lower/uppercase are considered the same.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4961
     The escape character is the backQuote.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4962
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4963
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4964
             NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4965
     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
  4966
     NOTICE: the receiver is the match pattern"
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
    ^ self
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4969
        match:aString from:start to:stop ignoreCase:ignoreCase
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4970
        escapeCharacter:(self class matchEscapeCharacter)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4971
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4972
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4973
     '*ute*' match:'12345COMPUTER' from:1 to:5 ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4974
     '*ute*' match:'12345COMPUTER' from:6 to:13 ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4975
    "
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
    "Modified: / 10.11.1998 / 21:43:46 / cg"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4978
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4979
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4980
match:aString from:start to:stop ignoreCase:ignoreCase escapeCharacter:escape
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4981
    <resource: #obsolete>
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4982
    "return true if part of aString matches myself,
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4983
     where self may contain GLOB meta-match
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4984
     characters $* (to match any string) or $# (to match any character)
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4985
     or [...] to match a set of characters.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4986
     If ignoreCase is true, lower/uppercase are considered the same.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4987
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4988
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4989
             NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4990
     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
  4991
     NOTICE: the receiver is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4992
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4993
    ^ self 
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4994
        match:aString from:start to:stop 
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4995
        caseSensitive:ignoreCase not 
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4996
        escapeCharacter:escape
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4997
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4998
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4999
     '*ute*' match:'12345COMPUTER' from:1 to:5 ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5000
     '*ute*' match:'12345COMPUTER' from:6 to:13 ignoreCase:true
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
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5003
    "Modified: / 10.11.1998 / 21:43:46 / cg"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5004
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5005
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5006
match:aString ignoreCase:ignoreCase
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  5007
    <resource: #obsolete>
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  5008
    "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
  5009
     characters $* (to match any string) or $# (to match any character)
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5010
     or [...] to match a set of characters.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5011
     If ignoreCase is true, lower/uppercase are considered the same.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5012
     The escape character is the backQuote.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5013
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5014
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  5015
             NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  5016
     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
  5017
     NOTICE: the receiver is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5018
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  5019
    "/ 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
  5020
    ^ self match:aString from:1 to:aString size ignoreCase:ignoreCase
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5021
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5022
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5023
     '*ute*' match:'COMPUTER' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5024
     '*uter' match:'COMPUTER' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5025
     '[abcd]*' match:'computer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5026
     '[abcd]*' match:'Computer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5027
     '[a-k]*' match:'komputer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5028
     '[a-k]*' match:'zomputer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5029
     '[a-k]*' match:'Komputer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5030
     '[a-k]*' match:'Komputer' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5031
     '*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
  5032
     '*some*compl*ern*' match:'this is another complicated pattern match' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5033
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5034
     Time millisecondsToRun:[
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  5035
        Symbol allInstancesDo:[:sym |
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  5036
            '[ab]*' match:sym ignoreCase:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  5037
        ]
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5038
     ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5039
     Time millisecondsToRun:[
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  5040
        Symbol allInstancesDo:[:sym |
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  5041
            '*at:*' match:sym ignoreCase:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  5042
        ]
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5043
     ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5044
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5045
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5046
    "Modified: 2.4.1997 / 17:28:58 / cg"
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
match:aString ignoreCase:ignoreCase escapeCharacter:escape
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  5050
    <resource: #obsolete>
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  5051
    "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
  5052
     characters $* (to match any string) or $# (to match any character)
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5053
     or [...] to match a set of characters.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5054
     If ignoreCase is true, lower/uppercase are considered the same.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5055
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5056
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5057
             NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  5058
     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
  5059
     NOTICE: the receiver is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5060
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5061
    ^ self match:aString from:1 to:aString size ignoreCase:ignoreCase escapeCharacter:escape
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5062
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
     '*ute*' match:'COMPUTER' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5065
     '*uter' match:'COMPUTER' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5066
     '[abcd]*' match:'computer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5067
     '[abcd]*' match:'Computer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5068
     '[a-k]*' match:'komputer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5069
     '[a-k]*' match:'zomputer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5070
     '[a-k]*' match:'Komputer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5071
     '[a-k]*' match:'Komputer' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5072
     '*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
  5073
     '*some*compl*ern*' match:'this is another complicated pattern match' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5074
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5075
     Time millisecondsToRun:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5076
        Symbol allInstancesDo:[:sym |
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5077
            '[ab]*' match:sym ignoreCase:false
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5078
        ]
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5079
     ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5080
     Time millisecondsToRun:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5081
        Symbol allInstancesDo:[:sym |
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5082
            '*at:*' match:sym ignoreCase:false
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5083
        ]
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5084
     ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5085
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5086
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5087
    "Modified: 2.4.1997 / 17:28:58 / cg"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5088
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5089
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5090
matches:aPatternString
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  5091
    "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
  5092
     characters $* (to match any string) or $# (to match any character).
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5093
     or [...] to match a set of characters.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5094
     Lower/uppercase are considered different.
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
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5097
             NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  5098
     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
  5099
     NOTICE: the receiver is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5100
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5101
    ^ aPatternString match:self
14054
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  5102
!
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  5103
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  5104
matches:aPatternString caseSensitive:caseSensitive
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  5105
    "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
  5106
     characters $* (to match any string) or $# (to match any character).
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  5107
     or [...] to match a set of characters.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  5108
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  5109
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  5110
             NOT the ST-80 meaning.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  5111
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  5112
     NOTICE: the receiver is the match pattern"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  5113
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  5114
    ^ aPatternString match:self caseSensitive:caseSensitive
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  5115
!
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  5116
14054
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  5117
matches:aPatternString ignoreCase:ignoreCase
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  5118
    <resource: #obsolete>
14054
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  5119
    "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
  5120
     characters $* (to match any string) or $# (to match any character).
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  5121
     or [...] to match a set of characters.
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  5122
     Lower/uppercase are considered different.
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  5123
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  5124
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  5125
             NOT the ST-80 meaning.
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  5126
     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
  5127
     NOTICE: the receiver is the match pattern"
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  5128
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  5129
    ^ aPatternString match:self caseSensitive:ignoreCase not
14054
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  5130
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  5131
    "Created: / 08-03-2012 / 03:11:11 / cg"
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5132
! !
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5133
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  5134
17625
585a7eb50e65 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17600
diff changeset
  5135
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5136
!CharacterArray methodsFor:'padded copying'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5137
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5138
centerPaddedTo:newSize
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5139
     "return a new string consisting of the receivers characters,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5140
     plus spaces up to length and center the receivers characters in
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5141
     the resulting string.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5142
     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
  5143
     the original receiver is returned unchanged."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5144
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5145
     ^ self centerPaddedTo:newSize with:(Character space)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5146
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5147
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5148
     'foo' centerPaddedTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5149
     123 printString centerPaddedTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5150
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5151
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5152
    "Created: 25.11.1995 / 10:53:57 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5153
!
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5154
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5155
centerPaddedTo:size with:padCharacter
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5156
    "return a new string of length size, which contains the receiver
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5157
     centered (i.e. padded on both sides).
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5158
     Characters are filled with padCharacter.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5159
     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
  5160
     the original receiver is returned unchanged."
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5161
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5162
    |len s|
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5163
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5164
    len := self size.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5165
    (len < size) ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5166
        s := self species new:size withAll:padCharacter.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5167
        s replaceFrom:(size - len) // 2  + 1 with:self.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5168
        ^ s
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5169
    ]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5170
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5171
    "
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5172
     'foo' centerPaddedTo:11 with:$.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5173
     'fooBar' centerPaddedTo:5 with:$.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5174
     123 printString centerPaddedTo:10 with:$.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5175
     (' ' , 123 printString) centerPaddedTo:10 with:$.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5176
     (Float pi printString) centerPaddedTo:15 with:(Character space)
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5177
     (Float pi printString) centerPaddedTo:15 with:$-
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5178
     (' ' , Float pi class name) centerPaddedTo:15 with:$.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5179
    "
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5180
!
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5181
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5182
decimalPaddedTo:size and:afterPeriod at:decimalCharacter
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5183
    "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
  5184
     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
  5185
     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
  5186
     to be padded).
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5187
     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
  5188
     the original receiver is returned unchanged.
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5189
     (sounds complicated ? -> see examples below)."
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5190
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5191
    ^ self
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5192
        decimalPaddedTo:size
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5193
        and:afterPeriod
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5194
        at:decimalCharacter
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5195
        withLeft:(Character space)
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5196
        right:$0
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5197
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5198
    "
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5199
     '123' decimalPaddedTo:10 and:3 at:$.      -> '   123    '
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5200
     '123' decimalPaddedTo:10 and:3 at:$.      -> '   123.000'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5201
     '123.' decimalPaddedTo:10 and:3 at:$.     -> '   123.000'
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5202
     '123.1' decimalPaddedTo:10 and:3 at:$.    -> '   123.100'
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5203
     '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
  5204
     '123.123' decimalPaddedTo:10 and:3 at:$.  -> '   123.123'
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5205
    "
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
    "Created: 23.12.1995 / 13:11:52 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5208
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5209
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5210
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
  5211
    "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
  5212
     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
  5213
     of the period.
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5214
     Characters on the left are filled with leftPadChar.
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5215
     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
  5216
     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
  5217
     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
  5218
     the original receiver is returned unchanged.
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5219
     (sounds complicated ? -> see examples below)."
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5220
5230
655c21ffe6cc care for negative size of rest-string when decimalPadding
Claus Gittinger <cg@exept.de>
parents: 5221
diff changeset
  5221
    |s idx n rest|
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5222
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5223
    idx := self indexOf:decimalCharacter.
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5224
    idx == 0 ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5225
        "/
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5226
        "/ no decimal point found; adjust string to the left of the period column
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5227
        "/
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5228
        rightPadChar isNil ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5229
            s := self , (self species new:afterPeriod + 1 withAll:leftPadChar)
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5230
        ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5231
            s:= self , decimalCharacter asString , (self species new:afterPeriod withAll:rightPadChar).
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5232
        ].
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5233
    ] ifFalse:[
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5234
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5235
        "/ the number of after-decimalPoint characters
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5236
        n := self size - idx.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5237
        rest := afterPeriod - n.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5238
        rest > 0 ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5239
            s := (self species new:rest withAll:(rightPadChar ? leftPadChar)).
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5240
        ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5241
            s := ''
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5242
        ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5243
        s := self , s.
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5244
    ].
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5245
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5246
    ^ s leftPaddedTo:size with:leftPadChar
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5247
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5248
    "
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5249
     '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
  5250
     '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
  5251
     '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
  5252
     '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
  5253
     '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
  5254
     '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
  5255
    "
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5256
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5257
    "Modified: 23.12.1995 / 13:08:18 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5258
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5259
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5260
leftPaddedTo:size
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5261
    "return a new string of length size, which contains the receiver
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5262
     right-adjusted (i.e. padded on the left).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5263
     Characters on the left are filled with spaces.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5264
     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
  5265
     the original receiver is returned unchanged."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5266
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5267
    ^ self leftPaddedTo:size with:(Character space)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5268
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5269
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5270
     'foo' leftPaddedTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5271
     'fooBar' leftPaddedTo:5
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5272
     123 printString leftPaddedTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5273
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5274
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5275
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5276
paddedTo:newSize
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5277
     "return a new string consisting of the receivers characters,
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5278
     plus spaces up to length.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5279
     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
  5280
     the original receiver is returned unchanged."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5281
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5282
     ^ self paddedTo:newSize with:(Character space)
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5283
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5284
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5285
     'foo' paddedTo:10
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5286
     123 printString paddedTo:10
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  5287
     '12345678901234' paddedTo:10
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5288
    "
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5289
! !
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5290
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5291
!CharacterArray methodsFor:'printing & storing'!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5292
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5293
article
17137
9a31ec4d6489 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17065
diff changeset
  5294
    "return an article string for the receiver.
9a31ec4d6489 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17065
diff changeset
  5295
     The original code only looked at the first character being a vowel;
9a31ec4d6489 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17065
diff changeset
  5296
     this has been enhanced by some heuristics - not perfect, still."
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5297
17241
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  5298
    |firstChar secondChar thirdChar|
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5299
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5300
    firstChar := (self at:1) asLowercase.
5848
ef81d77ca1ad UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5843
diff changeset
  5301
    ((firstChar isVowel and:[firstChar ~~ $u]) or:[firstChar == $x]) ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5302
        ^ 'an'
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5303
    ].
17043
4cd789620782 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17024
diff changeset
  5304
4cd789620782 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17024
diff changeset
  5305
    (self size >= 3) ifTrue:[
17165
1e2822c3c74c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17158
diff changeset
  5306
        secondChar := (self at:2) asLowercase.
17241
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  5307
        thirdChar := (self at:3) asLowercase.
17043
4cd789620782 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17024
diff changeset
  5308
        (firstChar isVowel not
17165
1e2822c3c74c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17158
diff changeset
  5309
        and:[(secondChar isVowel or:[secondChar == $y]) not       
17241
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  5310
        and:[thirdChar isVowel not ]]) ifTrue:[
17158
d21b6be88f32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17137
diff changeset
  5311
            "/ exceptions: 3 non-vowels in a row: looks like an abbreviation
17137
9a31ec4d6489 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17065
diff changeset
  5312
            (self size > 4) ifTrue:[
17468
dea693453518 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17442
diff changeset
  5313
                (firstChar == $s) ifTrue:[
dea693453518 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17442
diff changeset
  5314
                    ((secondChar == $c and:[thirdChar == $r])
dea693453518 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17442
diff changeset
  5315
                    or:[ (secondChar == $t and:[thirdChar == $r]) ]) ifTrue:[
17241
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  5316
                        (self at:4) isVowel ifTrue:[
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  5317
                            ^ 'a'
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  5318
                        ]
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  5319
                    ]
17137
9a31ec4d6489 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17065
diff changeset
  5320
                ].
9a31ec4d6489 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17065
diff changeset
  5321
            ].
17158
d21b6be88f32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17137
diff changeset
  5322
            "/ an abbreviation; treat x, s as vowels
d21b6be88f32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17137
diff changeset
  5323
            (firstChar == $x or:[ firstChar == $s ]) ifTrue:[^ 'an'].
17043
4cd789620782 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17024
diff changeset
  5324
        ]
4cd789620782 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17024
diff changeset
  5325
    ].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5326
    ^ 'a'
5848
ef81d77ca1ad UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5843
diff changeset
  5327
ef81d77ca1ad UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5843
diff changeset
  5328
    "
17137
9a31ec4d6489 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17065
diff changeset
  5329
        'uboot' article.   
9a31ec4d6489 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17065
diff changeset
  5330
        'xmas' article.    
17158
d21b6be88f32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17137
diff changeset
  5331
        'alarm' article.     
d21b6be88f32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17137
diff changeset
  5332
        'baby' article.      
d21b6be88f32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17137
diff changeset
  5333
        'sql' article.       
d21b6be88f32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17137
diff changeset
  5334
        'scr' article.       
d21b6be88f32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17137
diff changeset
  5335
        'screen' article.    
17137
9a31ec4d6489 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17065
diff changeset
  5336
        'scrollbar' article.  
17158
d21b6be88f32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17137
diff changeset
  5337
        'scrs' article.     
d21b6be88f32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17137
diff changeset
  5338
        'cvs' article.     
d21b6be88f32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17137
diff changeset
  5339
        'cvssource' article.     
17165
1e2822c3c74c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17158
diff changeset
  5340
        'symbol' article.     
17241
8f12aadd28bb class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17233
diff changeset
  5341
        'string' article.     
5848
ef81d77ca1ad UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5843
diff changeset
  5342
    "
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5343
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5344
8049
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  5345
basicStoreString
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  5346
    "return a String for storing myself"
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  5347
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  5348
    |s n index|
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  5349
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  5350
    n := self occurrencesOf:$'.
11320
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  5351
    n ~~ 0 ifTrue:[
15523
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5352
        s := self species new:(n + 2 + self size).
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5353
        s at:1 put:$'.
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5354
        index := 2.
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5355
        self do:[:thisChar |
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5356
            (thisChar == $') ifTrue:[
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5357
                s at:index put:thisChar.
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5358
                index := index + 1.
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5359
            ].
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5360
            s at:index put:thisChar.
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5361
            index := index + 1.
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5362
        ].
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5363
        s at:index put:$'.
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5364
        ^ s
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5365
    ].
11320
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  5366
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5367
    ^ '''' , self , ''''
15523
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5368
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5369
    "
15540
23f428755717 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15523
diff changeset
  5370
     '''immutable'' string' asImmutableString basicStoreString 
23f428755717 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15523
diff changeset
  5371
     'immutable string' asImmutableString basicStoreString 
15523
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5372
    "
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5373
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5374
    "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
  5375
!
8049
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  5376
11774
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  5377
displayOn:aGCOrStream
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  5378
    "Compatibility
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  5379
     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
  5380
     OR:
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  5381
     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
  5382
     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
  5383
     (although the fallBack is to display its printString ...)"
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  5384
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  5385
    "/ 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
  5386
    "/ 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
  5387
    (aGCOrStream isStream) ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5388
        self storeOn:aGCOrStream.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5389
        ^ self
11774
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  5390
    ].
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  5391
    ^ super displayOn:aGCOrStream
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  5392
!
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  5393
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5394
printOn:aStream
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5395
    "print the receiver on aStream"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5396
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5397
    aStream nextPutAll:self
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5398
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5399
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5400
printString
13079
111e7e456648 Implement display with #displayOn: instead of #displayString
Stefan Vogel <sv@exept.de>
parents: 13073
diff changeset
  5401
    "return a string for printing - that's myself"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5402
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5403
    ^ self
3578
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  5404
!
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  5405
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  5406
printWithQuotesDoubledOn:aStream
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  5407
    "put the raw storeString of myself on aStream"
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  5408
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  5409
    self do:[:thisChar |
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5410
        (thisChar == $') ifTrue:[aStream nextPut:thisChar].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5411
        aStream nextPut:thisChar
3578
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  5412
    ]
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  5413
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  5414
    "Modified: / 15.6.1998 / 17:21:17 / cg"
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  5415
    "Created: / 15.6.1998 / 17:22:13 / cg"
12171
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  5416
!
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  5417
15788
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5418
printXmlQuotedOn:aStream
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5419
    "convert aString to a valid XML string 
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5420
     that can be used for attributes, text, comments an PIs
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5421
     TODO: care for 16bit UNICODE string and escape chars ..."
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5422
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5423
    self do:[:eachChar |
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5424
        eachChar == $< ifTrue:[
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5425
            aStream nextPutAll:'&lt;'     "mapping needed for xml text"
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5426
        ] ifFalse:[ eachChar == $& ifTrue:[
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5427
            aStream nextPutAll:'&amp;'    "mapping needed for all"
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5428
        ] ifFalse:[ eachChar == $> ifTrue:[
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5429
            aStream nextPutAll:'&gt;'     "mapping needed for comments"
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5430
        ] ifFalse:[ eachChar == $' ifTrue:[
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5431
            aStream nextPutAll:'&apos;'   "mapping needed for attributes"
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5432
        ] ifFalse:[ eachChar == $" ifTrue:[
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5433
            aStream nextPutAll:'&quot;'   "mapping needed for attributes"
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5434
        ] ifFalse:[
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5435
            |codePoint|
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5436
            codePoint := eachChar codePoint.
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5437
            (codePoint < 16r20 or:[codePoint >= 16r7F]) ifTrue:[
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5438
                aStream nextPutAll:'&#'.
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5439
                codePoint printOn:aStream.
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5440
                aStream nextPut:$;.
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5441
        ] ifFalse:[
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5442
            aStream nextPut:eachChar
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5443
        ]]]]]]
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5444
    ].
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5445
!
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5446
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5447
printXmlTextQuotedOn:aStream
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5448
    "convert aString to a valid XML string 
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5449
     that can be used for XML text.
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5450
     Here line formatting characters are not escaped.
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5451
     TODO: care for 16bit UNICODE string and escape chars ..."
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5452
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5453
    self do:[:eachChar |
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5454
        eachChar == $< ifTrue:[
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5455
            aStream nextPutAll:'&lt;'     "mapping needed for xml text"
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5456
        ] ifFalse:[ eachChar == $& ifTrue:[
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5457
            aStream nextPutAll:'&amp;'    "mapping needed for all"
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5458
"/        ] ifFalse:[ eachChar == $> ifTrue:[
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5459
"/            aStream nextPutAll:'&gt;'     "mapping needed for comments"
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5460
"/        ] ifFalse:[ eachChar == $' ifTrue:[
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5461
"/            aStream nextPutAll:'&apos;'   "mapping needed for attributes"
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5462
"/        ] ifFalse:[ eachChar == $" ifTrue:[
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5463
"/            aStream nextPutAll:'&quot;'   "mapping needed for attributes"
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5464
        ] ifFalse:[
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5465
            |codePoint|
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5466
            codePoint := eachChar codePoint.
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5467
            ((codePoint < 16r20 and:[codePoint ~~ 9 and:[codePoint ~~ 10 and:[codePoint ~~ 13]]])
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5468
             or:[codePoint >= 16r7F]) ifTrue:[
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5469
                aStream nextPutAll:'&#'.
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5470
                codePoint printOn:aStream.
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5471
                aStream nextPut:$;.
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5472
        ] ifFalse:[
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5473
            aStream nextPut:eachChar
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5474
        ]]]"/]]]
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5475
    ].
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5476
!
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5477
12171
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  5478
printfWith:arg1 with:arg2 with:arg3 with:arg4 with:arg5
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5479
    "Format and print the receiver with <argI> formatted in C style,
12171
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  5480
     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
  5481
     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
  5482
12171
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  5483
    ^ self printf:(Array with:arg1 with:arg2 with:arg3 with:arg4 with:arg5)
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  5484
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  5485
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5486
     Transcript showCR:('%d %05x %08o %b' printfWith:123 with:234 with:345 with:123)
12171
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  5487
    "
15788
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5488
!
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5489
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5490
xmlQuotedPrintString
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5491
    "convert aString to a valid XML string 
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5492
     that can be used for attributes, text, comments an PIs
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5493
     TODO: care for 16bit UNICODE string and escape chars ..."
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5494
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5495
    ^ String streamContents:[:s|
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5496
        self printXmlQuotedOn:s
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5497
    ].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5498
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5499
11955
1230c6953d49 comments
Claus Gittinger <cg@exept.de>
parents: 11919
diff changeset
  5500
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5501
!CharacterArray methodsFor:'queries'!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5502
4429
564b0fd9168e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4410
diff changeset
  5503
bitsPerCharacter
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5504
    "return the underlying strings bitsPerCharacter
4429
564b0fd9168e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4410
diff changeset
  5505
     (i.e. is it a regular String or a TwoByteString)"
564b0fd9168e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4410
diff changeset
  5506
8457
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  5507
    |string max|
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  5508
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  5509
    (string := self string) ~~ self ifTrue:[
14555
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  5510
        ^ string bitsPerCharacter
8457
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  5511
    ].
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  5512
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  5513
    max := 8.
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  5514
    self do:[:eachCharacter |
14555
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  5515
        max := max max:(eachCharacter bitsPerCharacter)
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5516
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5517
    ^ max
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5518
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5519
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5520
     'hello' bitsPerCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5521
     'hello' asText allBold bitsPerCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5522
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5523
!
8457
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  5524
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5525
continuesWith:aString startingAt:startIndex
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5526
    "return true, if the receiver beginning at startIndex
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5527
     contains the characters in aString."
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5528
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5529
    |sz  "{Class: SmallInteger }"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5530
     idx "{Class: SmallInteger }"|
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5531
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5532
    sz := aString size.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5533
    idx := startIndex.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5534
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5535
    1 to:sz do:[:i |
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5536
        (self at:idx) ~~ (aString at:i) ifTrue:[^ false].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5537
        idx := idx + 1
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5538
    ].
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5539
    ^ true
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5540
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5541
    "
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5542
     'hello world' continuesWith:'world' startingAt:6
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5543
     'hello world' continuesWith:'world' startingAt:7
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5544
    "
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5545
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5546
    "Created: 12.5.1996 / 15:46:40 / cg"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5547
    "Modified: 26.7.1996 / 19:08:36 / cg"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5548
!
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5549
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5550
countWords
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5551
    "return the number of words, which are separated by separators"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5552
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5553
    |tally "{ Class: SmallInteger }"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5554
     start "{ Class: SmallInteger }"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5555
     mySize "{ Class: SmallInteger }"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5556
     stop ch|
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 := 0.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5559
    start := 1.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5560
    mySize := self size.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5561
    [start <= mySize] whileTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5562
        ch := self at:start.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5563
        ch isSeparator ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5564
            start := start + 1
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5565
        ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5566
            stop := self indexOfSeparatorStartingAt:start.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5567
            (stop == 0) ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5568
                stop := mySize + 1
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5569
            ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5570
            tally := tally + 1.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5571
            start := stop
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5572
        ]
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5573
    ].
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5574
    ^ tally
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5575
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5576
    "
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5577
     'hello world isnt this nice' countWords'
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5578
    "
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5579
!
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5580
11788
eea1835a1b7b added #defaultElement
Stefan Vogel <sv@exept.de>
parents: 11774
diff changeset
  5581
defaultElement
eea1835a1b7b added #defaultElement
Stefan Vogel <sv@exept.de>
parents: 11774
diff changeset
  5582
    ^ Character space
eea1835a1b7b added #defaultElement
Stefan Vogel <sv@exept.de>
parents: 11774
diff changeset
  5583
!
eea1835a1b7b added #defaultElement
Stefan Vogel <sv@exept.de>
parents: 11774
diff changeset
  5584
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5585
encoding
1311
367f740d21e7 commentary
Claus Gittinger <cg@exept.de>
parents: 1308
diff changeset
  5586
    "return the strings encoding, as a symbol.
7982
0412a26c4621 encoding now unicode
Claus Gittinger <cg@exept.de>
parents: 7977
diff changeset
  5587
     Here, by default, we assume unicode-encoding.
0412a26c4621 encoding now unicode
Claus Gittinger <cg@exept.de>
parents: 7977
diff changeset
  5588
     Notice, that iso8859-1 is a true subset of unicode,
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5589
     and that singleByteStrings are therefore both unicode AND
7982
0412a26c4621 encoding now unicode
Claus Gittinger <cg@exept.de>
parents: 7977
diff changeset
  5590
     8859-1 encoded."
0412a26c4621 encoding now unicode
Claus Gittinger <cg@exept.de>
parents: 7977
diff changeset
  5591
14168
fb2ae640ab02 formatting
Stefan Vogel <sv@exept.de>
parents: 14150
diff changeset
  5592
    ^ #unicode
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5593
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5594
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  5595
hasChangeOfEmphasis
14405
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  5596
    "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
  5597
     i.e. any non-normal (=emphasized) characters"
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  5598
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  5599
    ^ false
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  5600
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5601
    "Created: 12.5.1996 / 12:31:39 / cg"
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  5602
!
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  5603
7995
8ddbb403d67b +hasIcon and hasImage for LabelAndIcon compatibility
Claus Gittinger <cg@exept.de>
parents: 7991
diff changeset
  5604
hasIcon
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  5605
    "for LabelAndIcon compatibility"
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  5606
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5607
    ^ false
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5608
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5609
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5610
hasImage
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5611
    "for LabelAndIcon compatibility"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5612
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5613
    ^ false
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5614
!
7995
8ddbb403d67b +hasIcon and hasImage for LabelAndIcon compatibility
Claus Gittinger <cg@exept.de>
parents: 7991
diff changeset
  5615
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5616
heightOn:aGC
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5617
    "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
  5618
6528
cf4e93b8104b #on: -> #onDevice
Claus Gittinger <cg@exept.de>
parents: 6523
diff changeset
  5619
    ^ (aGC font onDevice:aGC device) heightOf:self
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5620
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5621
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5622
     'hello world' heightOn:(View new)
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5623
    "
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5624
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5625
    "Created: 12.5.1996 / 20:09:29 / cg"
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5626
    "Modified: 12.5.1996 / 20:32:05 / cg"
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5627
!
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5628
15773
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5629
isKeyword
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5630
    "return true, if the receiver is a keyword message selector"
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5631
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5632
    ^ self includes:$:
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5633
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5634
    "
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5635
     #at:put: isKeyword
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5636
     #at: isKeyword
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5637
     #+ isKeyword
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5638
     #size isKeyword
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5639
    "
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5640
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5641
    "Created: / 1.11.1997 / 12:34:55 / cg"
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5642
    "Modified: / 1.11.1997 / 12:36:37 / cg"
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5643
!
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5644
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5645
isLowercaseFirst
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5646
    "return true, if the first character is a lowercase character."
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5647
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5648
    ^ self size ~~ 0 and:[ self first isLowercase ]
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
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5651
     'helloWorld' isLowercaseFirst
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5652
     'HelloWorld' isLowercaseFirst
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5653
    "
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5654
!
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5655
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5656
isUppercaseFirst
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5657
    "return true, if the first character is an uppercase character."
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5658
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5659
    ^ self size ~~ 0 and:[ self first isUppercase ]
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5660
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5661
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5662
     'helloWorld' isUppercaseFirst
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5663
     'HelloWorld' isUppercaseFirst
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5664
    "
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5665
!
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5666
15773
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5667
keywords
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5668
    "assuming the receiver is a keyword message selector,
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5669
     return the individual keywords (i.e. break it up at colons)
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5670
     and return these as a collection.
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5671
     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
  5672
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5673
    |coll s part|
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5674
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5675
    coll := OrderedCollection new.
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5676
    s := ReadStream on:self.
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5677
    [s atEnd] whileFalse:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5678
        part := s through:$:.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5679
        coll add:part
15773
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5680
    ].
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5681
    ^ coll asArray
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5682
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5683
    "
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5684
     #at:put: keywords
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5685
     #at: keywords
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5686
     #+ keywords
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5687
     #size keywords
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5688
    "
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5689
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5690
    "Modified (Comment): / 30-06-2011 / 17:46:21 / cg"
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5691
!
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5692
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5693
knownAsSymbol
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5694
    "for now, only single character strings are allowed as symbols.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5695
     This method is redefined in String."
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5696
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5697
    ^ false
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5698
!
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5699
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5700
leftIndent
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5701
    "if the receiver starts with spaces, return the number of spaces
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5702
     at the left - otherwise, return 0.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5703
     If the receiver consists of spaces only, return the receivers size."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5704
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5705
    |index "{Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5706
     end   "{Class: SmallInteger }"|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5707
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5708
    index := 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5709
    end := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5710
    [index <= end] whileTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5711
        (self at:index) isSeparator ifFalse:[^ index - 1].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5712
        index := index + 1
8350
d9aaa0c937cb +isValidSmalltalkIdentifier
Claus Gittinger <cg@exept.de>
parents: 8347
diff changeset
  5713
    ].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5714
    ^ end
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5715
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5716
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5717
     '    hello' leftIndent
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5718
     'foo      ' leftIndent
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5719
     '         ' leftIndent
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5720
    "
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5721
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5722
    "Modified: 20.4.1996 / 19:28:43 / cg"
8350
d9aaa0c937cb +isValidSmalltalkIdentifier
Claus Gittinger <cg@exept.de>
parents: 8347
diff changeset
  5723
!
d9aaa0c937cb +isValidSmalltalkIdentifier
Claus Gittinger <cg@exept.de>
parents: 8347
diff changeset
  5724
10437
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5725
nameSpaceSelectorParts
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5726
    "Answer the namespace and baseSelector parts of a namespace selector.
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5727
     Namespace selectors are those generated by sends from a method in a different
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5728
     namespace; they are prefixed by ':'<ns>'::'.
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5729
     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
  5730
     Experimental"
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5731
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5732
    |nsPart selPart idx|
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5733
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5734
    (self at:1) == $: ifFalse:[^ Array with:'' with:self].
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5735
    idx := self indexOf:$: startingAt:3.
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5736
    idx == 0 ifTrue:[^ Array with:'' with:self].
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5737
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5738
    (idx+2 > self size) ifTrue:[^ Array with:'' with:self].
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5739
    (self at:idx+1) == $: ifFalse:[^ Array with:'' with:self].
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5740
    nsPart := self copyFrom:2 to:idx-1.
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5741
    selPart := self copyFrom:idx+2.
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5742
    ^ Array with:nsPart with:selPart
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5743
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5744
    "test:
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5745
     self assert:('+' nameSpaceSelectorParts) = #('' '+').
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5746
     self assert:(':+' nameSpaceSelectorParts) = #('' ':+').
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5747
     self assert:(':Foo:+' nameSpaceSelectorParts) = #('' ':Foo:+').
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5748
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5749
     self assert:(':Foo::+' nameSpaceSelectorParts) = #('Foo' '+').
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5750
     self assert:(':Foo::bar:baz:' nameSpaceSelectorParts) = #('Foo' 'bar:baz:').
10437
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5751
    "
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5752
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5753
    "Created: / 05-03-2007 / 17:16:58 / cg"
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5754
    "Modified: / 06-03-2007 / 11:51:15 / cg"
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5755
!
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5756
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5757
stringSpecies
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5758
    "return the underlying strings bitsPerCharacter
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  5759
     (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
  5760
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  5761
    |string|
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  5762
15523
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5763
    string := self string.
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5764
    string == self ifTrue:[^ self species].
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  5765
    ^ string stringSpecies
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  5766
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  5767
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5768
     'hello' stringSpecies
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5769
     'hello' asText allBold stringSpecies
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5770
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5771
!
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  5772
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  5773
widthFrom:startIndex to:endIndex on:aGC
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  5774
    "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
  5775
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  5776
    ^ (aGC font onDevice:aGC device) widthOf:self from:startIndex to:endIndex
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  5777
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  5778
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5779
     'hello world' widthFrom:1 to:5 on:(View new)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5780
     'hello' widthOn:(View new)
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  5781
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5782
!
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  5783
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5784
widthOn:aGC
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5785
    "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
  5786
6528
cf4e93b8104b #on: -> #onDevice
Claus Gittinger <cg@exept.de>
parents: 6523
diff changeset
  5787
    ^ (aGC font onDevice:aGC device) widthOf:self
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5788
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5789
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5790
     'hello world' widthOn:(View new)
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5791
    "
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5792
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5793
    "Created: 12.5.1996 / 20:09:29 / cg"
2554
309ee6707322 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2551
diff changeset
  5794
    "Modified: 17.4.1997 / 12:50:23 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5795
! !
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5796
18194
bec89cec5d13 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18181
diff changeset
  5797
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5798
!CharacterArray methodsFor:'special string converting'!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5799
16759
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  5800
asUnixFilenameString
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  5801
    "return a new string consisting of receiver's characters
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  5802
     with all \-characters replaced by /-characters.
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  5803
     If there are no backslashes, return the original"
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  5804
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  5805
    ^ self copyReplaceAll:$\ with:$/ ifNone:self
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  5806
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  5807
    "
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  5808
     'hello\world' asUnixFilenameString
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  5809
    "
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  5810
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  5811
    "Modified: / 18.7.1998 / 22:53:02 / cg"
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  5812
!
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  5813
14768
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5814
expandPlaceholders:escapeCharacter with:argArrayOrDictionary
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5815
    "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
  5816
     escape character to be used (typically $$ or $% are effectively used).
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5817
     Return a copy of the receiver, where all %i escapes are
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5818
     replaced by corresponding arguments' printStrings from the argArrayOrDictionary.
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5819
     I.e. 'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this') results
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5820
     in the new string 'hello world; how is this'.
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5821
     As an extension, the argument may also be a dictionary, providing
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5822
     values for symbolic keys.
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5823
     In this case, %a .. %z and %(...) are also allowed.
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5824
     (%1..%9 require a numeric key in the dictionary, however)
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5825
     To get a '%' character, use a '%%'-escape.
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5826
     To get an integer-indexed placeHolder followed by another digit,
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5827
     or an index > 9, you must use %(digit).
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5828
     See also bindWith:... for VisualAge compatibility."
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5829
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5830
    |stream|
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5831
18269
77a84c6693c8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18194
diff changeset
  5832
    stream := (TextStream ? CharacterWriteStream) on:(self species uninitializedNew:self size + 20).
14768
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5833
    self expandPlaceholders:escapeCharacter with:argArrayOrDictionary on:stream.
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5834
    ^ stream contents.
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5835
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
    "
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5838
     'hello %1' expandPlaceholdersWith:#('world')
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5839
     'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this')
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5840
     'hello %2; how is %1' expandPlaceholdersWith:#('world' 'this')
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5841
     '%1 plus %2 gives %3 ' expandPlaceholdersWith:#(4 5 9)
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5842
     '%%(1)0 gives %(1)0' expandPlaceholdersWith:#(123)
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5843
     '%%10 gives %10' expandPlaceholdersWith:#(123)
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5844
     '%%(10) gives %(10)' expandPlaceholdersWith:#(123)
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5845
     '%test gives %1' expandPlaceholdersWith:#(123)
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5846
     'bla %1 bla' expandPlaceholdersWith:{ 'hello' allBold }
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5847
     'bla %1 bla' expandPlaceholdersWith:{ 'hello' }
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5848
    "
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5849
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5850
    "
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5851
     |dict|
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5852
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5853
     dict := Dictionary new.
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5854
     dict at:1 put:'one'.
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5855
     dict at:$a put:'AAAAA'.
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5856
     dict at:$b put:[ Time now ].
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5857
     dict at:'foo' put:[ Date today ].
15196
116b287d6d89 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15167
diff changeset
  5858
     'hello $1 %a $b %(foo) $foo ' expandPlaceholders:$$ with:dict.       
116b287d6d89 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15167
diff changeset
  5859
     'hello $1 %a $b %(foo) $foo ' expandPlaceholders:$% with:dict.       
14768
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5860
    "
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5861
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5862
    "Modified: 1.7.1997 / 00:53:24 / cg"
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5863
!
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5864
14765
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5865
expandPlaceholders:escapeCharacter with:argArrayOrDictionary on:aStream
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5866
    "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
  5867
     escape character to be used (typically $$ or $% are effectively used).
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5868
     Write the receiver to aStream, where all %i escapes are
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5869
     replaced by corresponding arguments' printStrings from the argArrayOrDictionary.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5870
     I.e. 'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this') results
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5871
     in the new string 'hello world; how is this'.
17192
dc09b5644f84 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17191
diff changeset
  5872
     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
  5873
     In this case, %a .. %z and %(...) are also allowed.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5874
     (%1..%9 require a numeric key in the dictionary, however)
17192
dc09b5644f84 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17191
diff changeset
  5875
     Also, the values in argArrayOrDictionary may be blocks.
14765
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5876
     To get a '%' character, use a '%%'-escape.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5877
     To get an integer-indexed placeHolder followed by another digit,
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5878
     or an index > 9, you must use %(digit).
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5879
     See also bindWith:... for VisualAge compatibility.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5880
     Use %<cr> to insert a CR and %<tab> to insert a TAB."
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5881
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5882
    |next v key
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5883
     idx   "{ SmallInteger }"
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5884
     idx2  "{ SmallInteger }"
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5885
     start "{ SmallInteger }"
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5886
     stop  "{ SmallInteger }"|
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5887
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5888
    stop := self size.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5889
    start := 1.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5890
    [start <= stop] whileTrue:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5891
        idx := self indexOf:escapeCharacter startingAt:start.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5892
        (idx == 0 or:[idx == stop]) ifTrue:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5893
            aStream nextPutAll:self startingAt:start to:stop.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5894
            ^ self.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5895
        ].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5896
        "found an escapeCharacter"
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5897
        aStream nextPutAll:self startingAt:start to:(idx - 1).
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5898
        next := self at:(idx + 1).
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5899
        (next == escapeCharacter) ifTrue:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5900
            aStream nextPut:escapeCharacter.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5901
        ] ifFalse:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5902
            next == $< ifTrue:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5903
                idx2 := self indexOf:$> startingAt:idx+2.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5904
                key := self copyFrom:idx+2 to:idx2-1.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5905
                idx := idx2 - 1.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5906
                key := key asSymbolIfInterned.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5907
                (#(cr tab nl return lf ff null) includesIdentical:key) ifTrue:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5908
                    aStream nextPut:(Character perform:key).
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5909
                ].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5910
            ] ifFalse:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5911
                next isDigit ifTrue:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5912
                    v := argArrayOrDictionary at:(next digitValue) ifAbsent:''
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5913
                ] ifFalse:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5914
                    next == $( ifTrue:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5915
                        idx2 := self indexOf:$) startingAt:idx+2.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5916
                        key := self copyFrom:idx+2 to:idx2-1.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5917
                        idx := idx2 - 1.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5918
                        (argArrayOrDictionary includesKey:key) ifTrue:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5919
                            v := argArrayOrDictionary at:key
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5920
                        ] ifFalse:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5921
                            key := key asSymbolIfInterned ? key.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5922
                            (argArrayOrDictionary includesKey:key) ifTrue:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5923
                                v := argArrayOrDictionary at:key
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5924
                            ] ifFalse:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5925
                                (key size == 1 and:[ argArrayOrDictionary includesKey:(key at:1)]) ifTrue:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5926
                                    v := argArrayOrDictionary at:(key at:1)
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5927
                                ] ifFalse:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5928
                                    key isNumeric ifTrue:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5929
                                        key := Integer readFrom:key onError:nil.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5930
                                    ].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5931
                                    v := argArrayOrDictionary at:key ifAbsent:''
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5932
                                ]
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5933
                            ].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5934
                        ].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5935
                    ] ifFalse:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5936
                        (next isLetter and:[argArrayOrDictionary isSequenceable not "is a Dictionary"]) ifTrue:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5937
                            "so next is a non-numeric single character."
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5938
                            v := argArrayOrDictionary
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5939
                                    at:next
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5940
                                    ifAbsent:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5941
                                        "try symbol instead of character"
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5942
                                        argArrayOrDictionary
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5943
                                            at:next asSymbol
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5944
                                            ifAbsent:[String with:escapeCharacter with:next].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5945
                                 ].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5946
                        ] ifFalse:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5947
                            v := String with:$% with:next.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5948
                        ].
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
                "/ v notNil ifTrue:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5952
                    v isBlock ifTrue:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5953
                        v := v value
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5954
                    ].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5955
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5956
                    v printOn:aStream.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5957
                "/ ].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5958
            ]
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5959
        ].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5960
        start := idx + 2
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5961
    ].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5962
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5963
    "
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5964
     String streamContents:[:s|
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5965
        'hello %1' expandPlaceholders:$% with:#('world') on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5966
        s cr.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5967
        'hello $1; how is $2' expandPlaceholders:$$ with:#('world' 'this') on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5968
        s cr.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5969
        'hello %2; how is %1' expandPlaceholders:$% with:#('world' 'this') on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5970
        s cr.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5971
        '%1 plus %2 gives %3 ' expandPlaceholders:$% with:#(4 5 9) on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5972
        s cr.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5973
        '%%(1)0 gives %(1)0' expandPlaceholders:$% with:#(123) on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5974
        s cr.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5975
        '%%10 gives %10' expandPlaceholders:$% with:#(123) on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5976
        s cr.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5977
        '%%(10) gives %(10) %<cr>%<tab>next line' expandPlaceholders:$% with:#(123) on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5978
        s cr.
16452
2c3e39ef6902 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16295
diff changeset
  5979
        '%%test gives %test' expandPlaceholders:$% with:#(123) on:s.
2c3e39ef6902 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16295
diff changeset
  5980
        s cr.
2c3e39ef6902 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16295
diff changeset
  5981
        '|%%<tab>|%%1|%%<cr>| gives |%<tab>|%1|%<cr>|' expandPlaceholders:$% with:#(foo) 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
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5985
    "
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5986
     |dict|
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5987
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5988
     dict := Dictionary new.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5989
     dict at:1 put:'one'.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5990
     dict at:$a put:'AAAAA'.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5991
     dict at:$b put:[ Time now ].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5992
     String streamContents:[:s|
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5993
         'hello $1 $a $b' expandPlaceholders:$$ with:dict on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5994
     ].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5995
    "
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5996
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5997
    "Modified: / 18-11-2010 / 15:43:28 / cg"
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5998
!
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5999
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6000
expandPlaceholdersWith:argArrayOrDictionary
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6001
    "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
  6002
     replaced by corresponding arguments' printStrings from the argArrayOrDictionary.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6003
     I.e. 'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this') results
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6004
     in the new string 'hello world; how is this'.
4410
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  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)
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6009
     To get a '%' character, use a '%%'-escape.
7313
9be9b35f5370 comment
Claus Gittinger <cg@exept.de>
parents: 7312
diff changeset
  6010
     To get an integer-indexed placeHolder followed by another digit,
9be9b35f5370 comment
Claus Gittinger <cg@exept.de>
parents: 7312
diff changeset
  6011
     or an index > 9, you must use %(digit).
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6012
     See also bindWith:... for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6013
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6014
    |stream|
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6015
18269
77a84c6693c8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18194
diff changeset
  6016
    stream := (TextStream ? CharacterWriteStream) on:(self species uninitializedNew:self size + 20).
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6017
    self expandPlaceholdersWith:argArrayOrDictionary on:stream.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6018
    ^ stream contents.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6019
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6020
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6021
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6022
     'hello %1' expandPlaceholdersWith:#('world')
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6023
     'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this')
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6024
     'hello %2; how is %1' expandPlaceholdersWith:#('world' 'this')
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6025
     '%1 plus %2 gives %3 ' expandPlaceholdersWith:#(4 5 9)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6026
     '%%(1)0 gives %(1)0' expandPlaceholdersWith:#(123)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6027
     '%%10 gives %10' expandPlaceholdersWith:#(123)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6028
     '%%(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
  6029
     '%test gives %1' expandPlaceholdersWith:#(123)
11028
cb1ee3ddd91a expandPlaceHolders: care fr Text with emphasis
Claus Gittinger <cg@exept.de>
parents: 11018
diff changeset
  6030
     'bla %1 bla' expandPlaceholdersWith:{ 'hello' allBold }
cb1ee3ddd91a expandPlaceHolders: care fr Text with emphasis
Claus Gittinger <cg@exept.de>
parents: 11018
diff changeset
  6031
     'bla %1 bla' expandPlaceholdersWith:{ 'hello' }
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6032
    "
1026
455c9f609f4d care for 16bit strings in expandPlaceHolders
Claus Gittinger <cg@exept.de>
parents: 1025
diff changeset
  6033
4410
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  6034
    "
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  6035
     |dict|
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 := Dictionary new.
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  6038
     dict at:1 put:'one'.
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  6039
     dict at:$a put:'AAAAA'.
8794
a5df33935142 nindWith supports blocks in the value dictionary
Claus Gittinger <cg@exept.de>
parents: 8710
diff changeset
  6040
     dict at:$b put:[ Time now ].
12316
3e78905d70a9 comment/format in: #expandPlaceholdersWith:
Claus Gittinger <cg@exept.de>
parents: 12196
diff changeset
  6041
     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
  6042
     '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
  6043
    "
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  6044
2737
9f29aecea39d care for % at end in expandPlaceHolders.
Claus Gittinger <cg@exept.de>
parents: 2736
diff changeset
  6045
    "Modified: 1.7.1997 / 00:53:24 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6046
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6047
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6048
expandPlaceholdersWith:argArrayOrDictionary on:aStream
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6049
    "write the receiver to aStream, where all %i escapes are
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6050
     replaced by corresponding arguments' printStrings from the argArrayOrDictionary.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6051
     I.e. 'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this') results
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6052
     in the new string 'hello world; how is this'.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6053
     As an extension, the argument may also be a dictionary, providing
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6054
     values for symbolic keys.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6055
     In this case, %a .. %z and %(...) are also allowed.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6056
     (%1..%9 require a numeric key in the dictionary, however)
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6057
     To get a '%' character, use a '%%'-escape.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6058
     To get an integer-indexed placeHolder followed by another digit,
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6059
     or an index > 9, you must use %(digit).
10935
7142eab95639 #expandPlaceHoldersWith:in:
Stefan Vogel <sv@exept.de>
parents: 10929
diff changeset
  6060
     See also bindWith:... for VisualAge compatibility.
10939
d0ca31c1d1e9 #expandPlaceHoldersWith: handle %<cr> %<tab> etc
Stefan Vogel <sv@exept.de>
parents: 10935
diff changeset
  6061
     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
  6062
14765
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  6063
    ^ self expandPlaceholders:$% with:argArrayOrDictionary on:aStream
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6064
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6065
    "
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6066
     String streamContents:[:s|
14765
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  6067
        'hello %1' expandPlaceholdersWith:#('world') on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  6068
        s cr.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  6069
        'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this') on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  6070
        s cr.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  6071
        'hello %2; how is %1' expandPlaceholdersWith:#('world' 'this') on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  6072
        s cr.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  6073
        '%1 plus %2 gives %3 ' expandPlaceholdersWith:#(4 5 9) on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  6074
        s cr.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  6075
        '%%(1)0 gives %(1)0' expandPlaceholdersWith:#(123) on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  6076
        s cr.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  6077
        '%%10 gives %10' expandPlaceholdersWith:#(123) on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  6078
        s cr.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  6079
        '%%(10) gives %(10) %<cr>%<tab>next line' expandPlaceholdersWith:#(123) on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  6080
        s cr.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  6081
        '%test gives %1' expandPlaceholdersWith:#(123) on:s.
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6082
     ]
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6083
    "
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6084
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6085
    "
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6086
     |dict|
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6087
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6088
     dict := Dictionary new.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6089
     dict at:1 put:'one'.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6090
     dict at:$a put:'AAAAA'.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6091
     dict at:$b put:[ Time now ].
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6092
     String streamContents:[:s|
14765
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  6093
         'hello %1 %a %b' expandPlaceholdersWith:dict on:s.
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6094
     ].
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6095
    "
13008
a27647c36b31 changed: #expandPlaceholdersWith:on:
Claus Gittinger <cg@exept.de>
parents: 12925
diff changeset
  6096
13138
d2eb0eba5907 changed: #expandPlaceholdersWith:on:
Claus Gittinger <cg@exept.de>
parents: 13137
diff changeset
  6097
    "Modified: / 18-11-2010 / 15:43:28 / cg"
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6098
!
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  6099
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6100
firstLine
14405
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  6101
    "return the first line of a multiline string"
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  6102
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  6103
    ^ self asCollectionOfSubCollectionsSeparatedBy:(Character cr) do:[:line | ^ line].
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6104
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6105
    "
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6106
     'hello' firstLine
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6107
     '1\2\3' withCRs firstLine
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6108
     '\1\2\3' withCRs firstLine
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  6109
    "
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
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6112
tokensBasedOn:aCharacter
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6113
    "this is an ST-80 alias for the ST/X method
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6114
        asCollectionOfSubstringsSeparatedBy:"
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6115
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6116
    ^ self asCollectionOfSubstringsSeparatedBy:aCharacter
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6117
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6118
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6119
     'hello:world:isnt:this nice' tokensBasedOn:$:
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6120
     'foo,bar,baz' tokensBasedOn:$,
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6121
     '/etc/passwd' asFilename readStream nextLine tokensBasedOn:$:
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6122
    "
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
withCEscapes
16863
6235ea959712 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16855
diff changeset
  6126
    "return a new string consisting of receiver's characters
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6127
     with all special and unprintable characters replaced by \X-character escapes.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6128
     (similar to the way C-language literal Strings are represented).
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6129
     The resulting string will contain only 7-bit ascii characters.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6130
     Emphasis is not supported.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6131
     The following escapes are generated:
16785
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6132
        \'      single quote character
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6133
        \dQuote double quote character
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6134
        \r      return character
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6135
        \r      return character
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6136
        \n      newline character
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6137
        \t      tab character
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6138
        \\      the \ character itself
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6139
        \xnn    two digit hex number defining the characters ascii value
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6140
        \unnnn  four digit hex number defining the characters ascii value
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6141
        \Unnnnnnnn  eight digit hex number defining the characters ascii value
16863
6235ea959712 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16855
diff changeset
  6142
     This is the opposite of withoutCEscapes.
17000
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6143
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6144
     Sigh: this is named completely wrong (opposite naming of withCRs/witoutCRs),
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6145
           but it cannot be changed easily, as these methods are already used heavily
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6146
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6147
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6148
    |anyEscapeNeeded out seq|
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6149
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6150
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6151
     first, check if any escape is needed and return the receiver unchanged if not
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6152
    "
16785
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6153
    anyEscapeNeeded := self 
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6154
                        contains:[:ch | 
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6155
                            ((ch codePoint between:32 and:126) not
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6156
                            or:[ch == $' or:[ch == $"]]) 
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6157
                        ].
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6158
    anyEscapeNeeded ifFalse:[ ^ self ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6159
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6160
    self hasChangeOfEmphasis ifTrue:[ self error:'emphasis not supported' ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6161
18269
77a84c6693c8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18194
diff changeset
  6162
    out := WriteStream on:(String uninitializedNew:self size-1).
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6163
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6164
    self do:[:ch |
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6165
        |cp|
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6166
16785
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6167
        (ch == $' or:[ch == $"]) ifTrue:[
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6168
            out nextPut:$\.
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6169
            out nextPut:ch.
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6170
        ] ifFalse:[
16785
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6171
            (ch codePoint between:32 and:126) ifTrue:[
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6172
                out nextPut:ch
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6173
            ] ifFalse:[
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6174
                ch == Character return ifTrue:[
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6175
                    seq := '\r'
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6176
                ] ifFalse:[ ch == Character nl ifTrue:[
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6177
                    seq := '\n'
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6178
                ] ifFalse:[ ch == Character tab ifTrue:[
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6179
                    seq := '\t'
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6180
                ] ifFalse:[ ch == $\ ifTrue:[
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6181
                    seq := '\\'
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6182
                ] ifFalse:[ 
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6183
                    cp := ch codePoint.
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6184
                    cp <= 16rFF ifTrue:[
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6185
                        seq := '\x' , (cp printStringRadix:16 padTo:2)   
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6186
                    ] ifFalse:[
16785
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6187
                        cp <= 16rFFFF ifTrue:[
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6188
                            seq := '\u' , (cp printStringRadix:16 padTo:4)   
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6189
                        ] ifFalse:[
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6190
                            seq := '\U',(cp printStringRadix:16 padTo:8)
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6191
                        ]
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6192
                    ]
16785
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6193
                ]]]].
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6194
                out nextPutAll:seq
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6195
            ].
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6196
        ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6197
    ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6198
    ^ out contents
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6199
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6200
    "
17000
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6201
     'hello\n\tworld' withoutCEscapes. 
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6202
     'hello\nworld\na\n\tnice\n\t\tstring' withoutCEscapes withCEscapes.
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6203
     ('hello ',(Character value:16r1234),' world') withCEscapes 
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6204
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6205
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6206
    "Created: / 25-01-2012 / 11:08:16 / cg"
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6207
!
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6208
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6209
withCRs
17205
b266cb703584 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17192
diff changeset
  6210
    "return a new string consisting of the receiver's characters
16757
da377b8c79f5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16738
diff changeset
  6211
     with all \-characters replaced by cr-characters.
da377b8c79f5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16738
diff changeset
  6212
     If there are no backslashes, return the original"
da377b8c79f5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16738
diff changeset
  6213
16759
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  6214
    ^ self copyReplaceAll:$\ with:(Character cr) ifNone:self
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6215
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6216
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6217
     'hello\world' withCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6218
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6219
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6220
    "Modified: / 18.7.1998 / 22:53:02 / cg"
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
withEscapes
15405
ef2e23943761 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15400
diff changeset
  6224
    <resource: #obsolete>
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6225
    "has been renamed; the name withEscapes is misleading"
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6226
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6227
    self obsoleteMethodWarning:'use withoutCEscapes'.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6228
    ^ self withoutCEscapes.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6229
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6230
    "Modified: / 25-01-2012 / 10:42:30 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6231
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6232
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6233
withMatchEscapes
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6234
    "return a copy of the receiver with all match characters escaped
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6235
     by $\ characters (to be usable as a match string).
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6236
     Return the receiver, if there are none."
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6237
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  6238
    |in out c escape|
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  6239
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  6240
    escape := self class matchEscapeCharacter.
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6241
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6242
    in := self readStream.
7986
715c72e62d58 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7982
diff changeset
  6243
    out := WriteStream on:(self species new:self size).
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6244
    [in atEnd] whileFalse:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6245
        c := in next.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6246
        (c == escape or:['*[#' includes:c]) ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6247
            out nextPut:$\.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6248
        ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6249
        out nextPut:c.
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6250
    ].
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6251
    ^ out contents.
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6252
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6253
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6254
     '*foo' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6255
     '\*foo' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6256
     '*foo' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6257
     '\\*foo' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6258
     'foo*' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6259
     'foo\*' withMatchEscapes
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
     'f*o*o' withMatchEscapes
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6262
    "
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6263
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6264
    "Modified: 2.4.1997 / 18:13:04 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6265
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6266
14992
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6267
withSeparatorsCompacted
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6268
    "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
  6269
     Preserves a leading/trailing space."
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6270
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6271
    ^ self species streamContents:[:s |
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6272
        |skipping|
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6273
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6274
        skipping := false.
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6275
        1 to:self size do:[:idx |
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6276
            |char|
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6277
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6278
            char := self at:idx.
14993
bbabce626acf class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14992
diff changeset
  6279
            char isSeparator ifFalse:[
bbabce626acf class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14992
diff changeset
  6280
                s nextPut:char.
bbabce626acf class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14992
diff changeset
  6281
                skipping := false.
bbabce626acf class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14992
diff changeset
  6282
            ] ifTrue:[
bbabce626acf class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14992
diff changeset
  6283
                skipping ifFalse:[
14992
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6284
                    s nextPut:(Character space).
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6285
                    skipping := true
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6286
                ].
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6287
            ]
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6288
        ]
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6289
    ]
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6290
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6291
    "
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6292
     'hello wwww'         withSeparatorsCompacted  
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6293
     'hello    wwww'      withSeparatorsCompacted  
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6294
     '  hello wwww'       withSeparatorsCompacted  
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6295
     '  hello wwww   '    withSeparatorsCompacted  
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6296
     '  hello    wwww   ' withSeparatorsCompacted  
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6297
     'hel   lo www   w'   withSeparatorsCompacted  
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6298
    "
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6299
!
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6300
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6301
withTabs
735
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  6302
    "return a string consisting of the receivers characters
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  6303
     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
  6304
     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
  6305
     otherwise a new string is returned.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6306
     Limitation: only the very first spaces are replaced
15523
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  6307
                 (i.e. if the receiver contains newLine characters,
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  6308
                  no tabs are inserted after those lineBreaks)"
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6309
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6310
    |idx   "{ SmallInteger }"
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6311
     nTabs "{ SmallInteger }"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6312
     newString|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6313
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6314
    idx := self findFirst:[:c | (c ~~ Character space)].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6315
    nTabs := (idx-1) // 8.
5815
4acdd87a77d4 // can return negative numbers.
Stefan Vogel <sv@exept.de>
parents: 5795
diff changeset
  6316
    nTabs <= 0 ifTrue:[^ self].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6317
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6318
    "any tabs"
15523
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  6319
    newString := self species new:(self size - (nTabs * 7)).
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6320
    newString atAll:(1 to:nTabs) put:(Character tab).
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6321
    newString replaceFrom:(nTabs + 1) with:self startingAt:(nTabs * 8 + 1).
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6322
    ^ newString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6323
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6324
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6325
     '12345678901234567890' withTabs
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6326
     '       8901234567890' withTabs
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6327
     '        901234567890' withTabs
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6328
     '               67890' withTabs
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6329
     '                7890' withTabs
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6330
     '                 890' withTabs
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6331
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6332
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6333
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6334
withTabsExpanded
735
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  6335
    "return a string consisting of the receivers characters,
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6336
     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
  6337
     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
  6338
     otherwise a new string is returned.
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  6339
     This does handle multiline strings."
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6340
5741
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  6341
    ^ self withTabsExpanded:8
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  6342
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  6343
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6344
     ('1' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6345
     ('12345' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6346
     ('123456' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6347
     ('1234567' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6348
     ('12345678' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6349
     ('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
  6350
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  6351
     (String with:Character tab
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6352
             with:Character tab
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6353
             with:$1) withTabsExpanded
5741
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  6354
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  6355
     (String with:Character tab
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6356
             with:$1
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6357
             with:Character tab
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6358
             with:$2) withTabsExpanded
5741
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  6359
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  6360
     (String with:Character tab
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6361
             with:$1
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6362
             with:Character cr
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6363
             with:Character tab
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6364
             with:$2) withTabsExpanded
5741
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  6365
    "
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  6366
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  6367
    "Modified: 12.5.1996 / 13:05:10 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6368
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6369
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6370
withTabsExpanded:numSpaces
5741
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  6371
    "return a string consisting of the receivers characters,
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6372
     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
  6373
     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
  6374
     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
  6375
     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
  6376
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6377
    |col    "{ SmallInteger }"
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6378
     str ch
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6379
     dstIdx "{ SmallInteger }"
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6380
     newSz  "{ SmallInteger }"
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6381
     sz "{ SmallInteger }"
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6382
     hasEmphasis e|
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6383
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6384
    (self includes:(Character tab)) ifFalse:[^ self].
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6385
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6386
    sz := self size.
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6387
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6388
    "/ count the new size first, instead of
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6389
    "/ multiple resizing (better for large strings)
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6390
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6391
    col := 1. newSz := 0.
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6392
    1 to:sz do:[:srcIdx |
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6393
        ch := self at:srcIdx.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6394
        ch == Character tab ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6395
            col := col + 1.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6396
            newSz := newSz + 1.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6397
            ch == Character cr ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6398
                col := 1
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6399
            ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6400
        ] ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6401
            (col \\ numSpaces) to:numSpaces do:[:ii |
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6402
                newSz := newSz + 1.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6403
                col := col + 1
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6404
            ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6405
        ]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6406
    ].
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6407
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6408
    str := self species new:newSz.
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6409
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6410
    hasEmphasis := self hasChangeOfEmphasis.
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6411
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6412
    col := 1. dstIdx := 1.
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6413
    1 to:sz do:[:srcIdx |
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6414
        ch := self at:srcIdx.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6415
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6416
        ch == Character tab ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6417
            col := col + 1.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6418
            ch == Character cr ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6419
                col := 1
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6420
            ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6421
            hasEmphasis ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6422
                e := self emphasisAt:srcIdx.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6423
                str emphasisAt:dstIdx put:e
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6424
            ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6425
            str at:dstIdx put:ch.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6426
            dstIdx := dstIdx + 1
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6427
        ] ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6428
            (col \\ numSpaces) to:numSpaces do:[:ii |
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6429
                str at:dstIdx put:Character space.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6430
                dstIdx := dstIdx + 1.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6431
                col := col + 1
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6432
            ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6433
        ]
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6434
    ].
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6435
    ^ str
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6436
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6437
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6438
     ('1' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6439
     ('1' , Character tab asString , 'x') withTabsExpanded:4
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6440
     ('12345' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6441
     ('123456' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6442
     ('1234567' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6443
     ('12345678' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6444
     ('123456789' , Character tab asString , 'x') withTabsExpanded
735
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  6445
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6446
     (String with:Character tab
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6447
             with:Character tab
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6448
             with:$1) withTabsExpanded
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6449
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6450
     (String with:Character tab
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6451
             with:$1
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6452
             with:Character tab
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6453
             with:$2) withTabsExpanded
735
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  6454
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  6455
     (String with:Character tab
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6456
             with:$1
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6457
             with:Character cr
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6458
             with:Character tab
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6459
             with:$2) withTabsExpanded
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6460
    "
735
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  6461
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6462
    "Modified: 12.5.1996 / 13:05:10 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6463
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6464
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6465
withoutAllSpaces
16855
c088880a590b class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16785
diff changeset
  6466
    "return a copy of the receiver with all whitespace removed"
c088880a590b class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16785
diff changeset
  6467
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6468
    ^ self asCollectionOfWords asStringWith:''.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6469
"/    |col string|
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6470
"/
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6471
"/    col := self asCollectionOfWords.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6472
"/    string := String new.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6473
"/    col do:[:el |
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6474
"/       string := string,el
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6475
"/    ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6476
"/    ^string
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6477
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6478
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6479
     'hello wwww'  withoutAllSpaces
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6480
     'hel   lo www   w'  withoutAllSpaces
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6481
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6482
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6483
    "Modified: / 18.7.1998 / 22:53:08 / cg"
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6484
!
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6485
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6486
withoutCEscapes
15628
4fe28df5850d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15605
diff changeset
  6487
    "return a new string consisting of receiver's characters
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6488
     with all \X-character escapes replaced by corresponding-characters.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6489
     (similar to the way C-language Strings are converted).
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6490
     The following escapes are supported:
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6491
        \r      return character
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6492
        \n      newline character
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6493
        \b      backspace character
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6494
        \f      formfeed character
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6495
        \t      tab character
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6496
        \e      escape character
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6497
        \\      the \ character itself
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6498
        \nnn    three digit octal number defining the characters ascii value
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6499
        \xnn    two digit hex number defining the characters ascii value
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6500
        \unnnn  four digit hex number defining the characters unicode value
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6501
        \Unnnnnnnn  eight digit hex number defining the characters unicode value
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6502
        \other  other
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6503
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6504
     Notice, that \' is NOT a valid escape, since the general syntax of
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6505
     string constants is not affected by this method.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6506
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6507
     Although easily implementable, this is NOT done automatically
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6508
     by the compiler (due to a lack of a language standard for this).
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6509
     However, the compiler may detect sends ot #withEscapes to string literals
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6510
     and place a modified string constant into the binary/byte-code.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6511
     Therefore, no runtime penalty will be payed for using these escapes.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6512
     (not in pre 2.11 versions)
16863
6235ea959712 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16855
diff changeset
  6513
6235ea959712 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16855
diff changeset
  6514
     This is the opposite of withCEscapes.
17000
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6515
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6516
     Sigh: this is named completely wrong (opposite naming of withCRs/witoutCRs),
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6517
           but it cannot be changed easily, as these methods are already used heavily
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6518
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6519
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6520
    |val     "{ SmallInteger }"
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6521
     in out nextChar nDigits|
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6522
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6523
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6524
     first, see if there is any escape; if not, return the receiver unchanged
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6525
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6526
    (self includes:$\) ifFalse:[^ self ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6527
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6528
    self hasChangeOfEmphasis ifTrue:[ self error:'emphasis not supported' ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6529
    out := CharacterWriteStream on:(String new:self size - 1).
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6530
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6531
    in := ReadStream on:self.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6532
    [in atEnd] whileFalse:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6533
        nextChar := in next.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6534
        nextChar == $\ ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6535
            in atEnd ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6536
            ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6537
                nextChar := in next.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6538
                nextChar == $r ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6539
                    nextChar := Character return
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6540
                ] ifFalse:[ nextChar == $n ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6541
                    nextChar := Character nl
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6542
                ] ifFalse:[ nextChar == $b ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6543
                    nextChar := Character backspace
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6544
                ] ifFalse:[ nextChar == $f ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6545
                    nextChar := Character newPage
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6546
                ] ifFalse:[ nextChar == $t ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6547
                    nextChar := Character tab
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6548
                ] ifFalse:[ nextChar == $e ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6549
                    nextChar := Character esc
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6550
                ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6551
                    nextChar == $0 ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6552
                        val := 0.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6553
                        nextChar := in peek.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6554
                        nDigits := 1.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6555
                        [nextChar notNil and:[nextChar isDigit and:[nDigits <= 3]]] whileTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6556
                            val := (val * 8) + nextChar digitValue.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6557
                            nextChar := in nextPeek.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6558
                            nDigits := nDigits + 1.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6559
                        ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6560
                        nextChar := Character value:val.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6561
                    ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6562
                        val := 0.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6563
                        nextChar == $x ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6564
                            2 timesRepeat:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6565
                                nextChar := in next.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6566
                                val := (val * 16) + nextChar digitValue.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6567
                            ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6568
                            nextChar := Character value:val.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6569
                        ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6570
                            nextChar == $u ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6571
                                4 timesRepeat:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6572
                                    nextChar := in next.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6573
                                    val := (val * 16) + nextChar digitValue.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6574
                                ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6575
                                nextChar := Character value:val.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6576
                            ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6577
                                nextChar == $U ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6578
                                    8 timesRepeat:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6579
                                        nextChar := in next.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6580
                                        val := (val * 16) + nextChar digitValue.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6581
                                    ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6582
                                    nextChar := Character value:val.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6583
                                ]
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6584
                            ]
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6585
                        ]
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6586
                    ]
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6587
                ]]]]]].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6588
            ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6589
        ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6590
        out nextPut:nextChar.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6591
    ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6592
    ^ out contents
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6593
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6594
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6595
     'hello world' withoutCEscapes         
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6596
     'hello\world' withoutCEscapes         
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6597
     'hello\world\' withoutCEscapes        
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6598
     'hello world\' withoutCEscapes        
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6599
     'hello\tworld' withoutCEscapes        
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6600
     'hello\nworld\na\n\tnice\n\t\tstring' withoutCEscapes
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6601
     'hello\tworld\n' withoutCEscapes   
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6602
     'hello\010world' withoutCEscapes   
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6603
     'hello\r\nworld' withoutCEscapes   
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6604
     'hello\r\n\x08world' withoutCEscapes 
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6605
     '0\x080' withoutCEscapes       
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6606
     '0\u12340' withoutCEscapes       
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6607
     '0\U123456780' withoutCEscapes       
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6608
     '0\0a' withoutCEscapes     
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6609
     '0\00a' withoutCEscapes       
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6610
     '0\000a' withoutCEscapes       
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6611
     '0\0000a' withoutCEscapes       
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6612
     '0\00000a' withoutCEscapes       
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6613
     '0\03770' withoutCEscapes       
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6614
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6615
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6616
    "Created: / 25-01-2012 / 10:41:44 / cg"
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6617
!
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6618
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6619
withoutCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6620
    "return a new collection consisting of receivers elements
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6621
     with all cr-characters replaced by \-characters.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6622
     This is the reverse operation of withCRs."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6623
16759
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  6624
    ^ self copyReplaceAll:(Character cr) with:$\ ifNone:self
12319
18b80c2ce1e3 oops #withoutSeparators #withoutSpaces were noops
Claus Gittinger <cg@exept.de>
parents: 12317
diff changeset
  6625
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6626
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6627
     'hello
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6628
world' withoutCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6629
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6630
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6631
    "Modified: / 18.7.1998 / 22:53:08 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6632
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6633
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6634
withoutLeadingSeparators
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6635
    "return a copy of myself without leading separators.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6636
     Notice: this does remove tabs, newline or any other whitespace.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6637
     Returns an empty string, if the receiver consist only of whitespace."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6638
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6639
    |index|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6640
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6641
    index := self indexOfNonSeparatorStartingAt:1.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6642
    index ~~ 0 ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6643
        index == 1 ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6644
            ^ self
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6645
        ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6646
        ^ self copyFrom:index
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6647
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6648
    ^ ''
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6649
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6650
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6651
     '    foo    ' withoutLeadingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6652
     'foo    '     withoutLeadingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6653
     '    foo'     withoutLeadingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6654
     '       '     withoutLeadingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6655
     'foo'         withoutLeadingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6656
     ('  ' , Character tab asString , ' foo   ') withoutLeadingSeparators inspect
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6657
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6658
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6659
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6660
withoutMatchEscapes
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6661
    "return a copy of the receiver with all $\ removed or
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6662
     the receiver, if there are none."
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6663
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  6664
    |in out c escape|
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  6665
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  6666
    escape := self class matchEscapeCharacter.
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6667
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6668
    in := self readStream.
8222
f2c454a9a038 replaced '' writeStream by String writeStream
Claus Gittinger <cg@exept.de>
parents: 8124
diff changeset
  6669
    out := self species writeStream.
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6670
    [in atEnd] whileFalse:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6671
        c := in next.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6672
        c == escape ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6673
            in atEnd ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6674
                c := in next.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6675
            ]
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6676
        ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6677
        out nextPut:c.
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6678
    ].
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6679
    ^ out contents.
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6680
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6681
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6682
     '*foo' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6683
     '\*foo' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6684
     '*foo' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6685
     '\\*foo' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6686
     'foo*' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6687
     'foo\*' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6688
     'foo\' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6689
     'f\*o\*o' withoutMatchEscapes
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6690
    "
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6691
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6692
    "Modified: 30.6.1997 / 13:40:23 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6693
!
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
withoutPrefix:aString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6696
    "if the receiver startsWith aPrefix, return a copy without it.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6697
     Otherwise return the receiver"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6698
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6699
    (self startsWith:aString) ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6700
        ^ self copyFrom:aString size + 1
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6701
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6702
    ^ self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6703
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6704
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6705
     'helloworld' withoutPrefix:'hello'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6706
     'helloworld' withoutPrefix:'foo'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6707
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6708
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6709
10671
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  6710
withoutQuotes
17000
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6711
    "/ remove quotes ($" and $') from the front and end of myself (if matching)"
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6712
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6713
    |firstChar|
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6714
17024
f0ef2620b98b class: CharacterArray
ca
parents: 17021
diff changeset
  6715
    self isEmpty ifTrue:[^ self].
f0ef2620b98b class: CharacterArray
ca
parents: 17021
diff changeset
  6716
17000
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6717
    firstChar := self first.
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6718
    ((firstChar == $") or:[firstChar == $']) ifFalse:[^ self].
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6719
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6720
    self last == firstChar ifTrue:[
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6721
        ^ self copyFrom:2 to:(self size-1)
10671
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  6722
    ].
17000
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6723
    ^ self
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6724
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6725
    "/
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6726
    "/ '"hello"' withoutQuotes     
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6727
    "/ '''hello''' withoutQuotes   
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6728
    "/ 'hello' withoutQuotes 
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6729
    "/ '"hello' withoutQuotes 
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6730
    "/ 'hello"' withoutQuotes  
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6731
    "/
10671
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  6732
!
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  6733
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6734
withoutSeparators
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6735
    "return a copy of myself without leading and trailing whitespace.
4156
3079a5a94617 comments
Claus Gittinger <cg@exept.de>
parents: 4117
diff changeset
  6736
     (but whiteSpace in-between is preserved)
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6737
     Whitespace is space, tab, newline, formfeed.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6738
     Use withoutSpaces, if you want to remove spaces only."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6739
12319
18b80c2ce1e3 oops #withoutSeparators #withoutSpaces were noops
Claus Gittinger <cg@exept.de>
parents: 12317
diff changeset
  6740
    ^ self trimForWhich:[:ch | ch isSeparator]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6741
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6742
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6743
     '    foo    ' withoutSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6744
     '    foo' withoutSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6745
     'foo    ' withoutSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6746
     '       ' withoutSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6747
     ('  foo' , Character tab asString , '    ') withoutSeparators inspect
12319
18b80c2ce1e3 oops #withoutSeparators #withoutSpaces were noops
Claus Gittinger <cg@exept.de>
parents: 12317
diff changeset
  6748
     '    foo    ' asUnicode16String withoutSeparators
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6749
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6750
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6751
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6752
withoutSpaces
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6753
    "return a copy of myself without leading and trailing spaces.
4156
3079a5a94617 comments
Claus Gittinger <cg@exept.de>
parents: 4117
diff changeset
  6754
     (but spaces in-between are preserved)
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6755
     Notice: this does NOT remove tabs, newline or any other whitespace.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6756
     Use withoutSeparators for this."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6757
12319
18b80c2ce1e3 oops #withoutSeparators #withoutSpaces were noops
Claus Gittinger <cg@exept.de>
parents: 12317
diff changeset
  6758
    ^ self trimForWhich:[:ch | ch == Character space]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6759
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6760
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6761
     '    foo    ' withoutSpaces
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6762
     'foo    '     withoutSpaces
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6763
     '    foo'     withoutSpaces
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6764
     '       '     withoutSpaces
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6765
     'a     b'     withoutSpaces
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6766
     ('  foo' , Character tab asString , '    ') withoutSpaces inspect
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6767
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6768
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6769
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6770
withoutTrailingSeparators
915
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  6771
    "return a copy of myself without trailing separators.
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  6772
     Notice: this does remove tabs, newline or any other whitespace.
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  6773
     Returns an empty string, if the receiver consist only of whitespace."
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  6774
12188
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  6775
    ^ self withoutTrailingForWhich:[:ch | ch isSeparator]
915
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  6776
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  6777
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6778
     '    foo    ' withoutTrailingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6779
     'foo    '     withoutTrailingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6780
     '    foo'     withoutTrailingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6781
     '       '     withoutTrailingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6782
     'foo'         withoutTrailingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6783
     ('  ' , Character tab asString , ' foo   ') withoutTrailingSeparators inspect
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6784
     ('   foo' , Character tab asString) withoutTrailingSeparators inspect
915
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
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
18194
bec89cec5d13 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18181
diff changeset
  6788
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6789
!CharacterArray methodsFor:'substring searching'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6790
15055
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6791
findRangeOfString:subString
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6792
    "find a substring. if found, return the start- and endIndex;
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6793
     if not found, return an empty interval."
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6794
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6795
    ^ self rangeOfSubCollection:subString startingAt:1 ifAbsent:[0 to:-1] caseSensitive:true
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6796
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6797
    "
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6798
     'hello world' findRangeOfString:'llo'
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6799
     'hello world' findRangeOfString:'ole'
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6800
    "
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6801
!
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6802
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6803
findString:subString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6804
    "find a substring. if found, return the index;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6805
     if not found, return 0."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6806
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6807
    ^ self indexOfSubCollection:subString startingAt:1 ifAbsent:0 caseSensitive:true
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6808
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6809
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6810
     'hello world' findString:'llo'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6811
     'hello world' findString:'ole'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6812
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6813
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6814
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  6815
findString:subString caseSensitive:caseSensitive
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  6816
    "find a substring. if found, return the index;
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  6817
     if not found, return 0."
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  6818
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  6819
    ^ self indexOfSubCollection:subString startingAt:1 ifAbsent:0 caseSensitive:caseSensitive
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  6820
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  6821
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  6822
     'hello world' findString:'LLo' caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  6823
     'hello world' findString:'LLo' caseSensitive:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  6824
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  6825
!
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  6826
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6827
findString:subString ifAbsent:exceptionBlock
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6828
    "find a substring. If found, return the index;
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6829
     if not found, return the result of evaluating exceptionBlock."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6830
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6831
    ^ self indexOfSubCollection:subString startingAt:1 ifAbsent:exceptionBlock caseSensitive:true
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6832
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6833
11018
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  6834
findString:subString ignoreCase:ignoreCase
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  6835
    <resource: #obsolete>
11018
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  6836
    "find a substring. if found, return the index;
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  6837
     if not found, return 0."
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  6838
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  6839
    ^ self indexOfSubCollection:subString startingAt:1 ifAbsent:0 caseSensitive:ignoreCase not
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  6840
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  6841
    "
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  6842
     'hello world' findString:'LLo' ignoreCase:false
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  6843
     'hello world' findString:'LLo' ignoreCase:true
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  6844
    "
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  6845
!
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  6846
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6847
findString:subString startingAt:index
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6848
    "find a substring, starting at index. if found, return the index;
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6849
     if not found, return 0."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6850
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6851
    ^ self indexOfSubCollection:subString startingAt:index ifAbsent:0 caseSensitive:true
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6852
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6853
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6854
     'hello yello' findString:'llo' startingAt:1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6855
     'hello yello' findString:'llo' startingAt:5
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6856
     'hello yello' findString:'llo' startingAt:15
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6857
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6858
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6859
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6860
findString:subString startingAt:index ifAbsent:exceptionBlock
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6861
    "find a substring, starting at index. if found, return the index;
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6862
     if not found, return the result of evaluating exceptionBlock."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6863
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6864
    ^ self indexOfSubCollection:subString startingAt:index ifAbsent:exceptionBlock caseSensitive:true
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6865
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6866
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6867
findString:subString startingAt:index ifAbsent:exceptionBlock caseSensitive:caseSensitive
10929
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  6868
    "find a substring, starting at index. if found, return the index;
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  6869
     if not found, return the result of evaluating exceptionBlock."
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  6870
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  6871
    ^ self indexOfSubCollection:subString startingAt:index ifAbsent:exceptionBlock caseSensitive:caseSensitive
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  6872
!
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  6873
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6874
includesString:aString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6875
    "return true, if a substring is contained in the receiver"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6876
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6877
    ^ (self indexOfSubCollection:aString startingAt:1 ifAbsent:0 caseSensitive:true) ~~ 0
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6878
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6879
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6880
     'hello world' includesString:'hel'
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6881
     'hello world' includesString:'rld'
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6882
     'hello world' includesString:'llo'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6883
     'hello world' includesString:'LLO'
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6884
     'hello world' includesString:''
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6885
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6886
!
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  6887
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  6888
includesString:aString caseSensitive:caseSensitive
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6889
    "return true, if a substring is contained in the receiver"
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6890
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6891
    ^ (self indexOfSubCollection:aString startingAt:1 ifAbsent:0 caseSensitive:caseSensitive) ~~ 0
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6892
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6893
    "
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6894
     'hello world' includesString:'hel' caseSensitive:true
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6895
     'hello world' includesString:'HEL' caseSensitive:true
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6896
     'hello world' includesString:'HEL' caseSensitive:false
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6897
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6898
     'hello world' includesString:'wor' caseSensitive:true
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6899
     'hello world' includesString:'WOR' caseSensitive:true
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6900
     'hello world' includesString:'WOR' caseSensitive:false
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6901
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6902
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6903
17486
695203c93b71 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17485
diff changeset
  6904
indexOfString: aString
695203c93b71 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17485
diff changeset
  6905
    "VSE and V'age compatibility"
695203c93b71 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17485
diff changeset
  6906
    "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
  6907
695203c93b71 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17485
diff changeset
  6908
    ^ self indexOfSubCollection: aString startingAt: 1 ifAbsent:[0]
695203c93b71 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17485
diff changeset
  6909
!
695203c93b71 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17485
diff changeset
  6910
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6911
indexOfSubCollection:subString startingAt:index ifAbsent:exceptionBlock
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6912
    "find a substring, starting at index. if found, return the index;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6913
     if not found, return the result of evaluating exceptionBlock.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6914
     This is a q&d hack - not very efficient"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6915
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6916
    ^ self indexOfSubCollection:subString startingAt:index ifAbsent:exceptionBlock caseSensitive:true.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6917
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6918
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6919
indexOfSubCollection:subString startingAt:index ifAbsent:exceptionBlock caseSensitive:caseSensitive
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6920
    "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
  6921
     if not found, return the result of evaluating exceptionBlock.
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6922
     This is a q&d hack - not very efficient"
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6923
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6924
    |firstChar found
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6925
     startIndex "{ Class: SmallInteger }"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6926
     subSize    "{ Class: SmallInteger }"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6927
     mySize     "{ Class: SmallInteger }"
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6928
     runIdx     "{ Class: SmallInteger }"
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6929
     tester|
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6930
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6931
    subSize := subString size.
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6932
    subSize == 0 ifTrue:[
15433
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6933
        subString isString ifFalse:[
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6934
           self error:'non string argument' mayProceed:true.
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6935
        ].
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6936
        "empty string does not match"
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6937
        ^ 0.
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6938
        "empty string matches"
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6939
"/        ^ index
6122
a98958f1c85f handle non-string arg to indexOfSubString:
Claus Gittinger <cg@exept.de>
parents: 6119
diff changeset
  6940
    ].
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6941
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6942
    mySize := self size.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6943
    firstChar := subString at:1.
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6944
    caseSensitive ifTrue:[
15433
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6945
        tester := [:c1 :c2 | c1 = c2 ].
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6946
        startIndex := self indexOf:firstChar startingAt:index.
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6947
    ] ifFalse:[
15433
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6948
        tester := [:c1 :c2 | c1 sameAs: c2 ].
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6949
        startIndex := self findFirst:[:c | c sameAs:firstChar] startingAt:index.
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6950
    ].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6951
    [startIndex == 0] whileFalse:[
15433
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6952
        runIdx := startIndex.
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6953
        found := true.
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6954
        1 to:subSize do:[:i |
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6955
            runIdx > mySize ifTrue:[
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6956
                found := false
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6957
            ] ifFalse:[
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6958
                (tester value:(subString at:i) value:(self at:runIdx)) ifFalse:[
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6959
                    found := false
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6960
                ]
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6961
            ].
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6962
            runIdx := runIdx + 1
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6963
        ].
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6964
        found ifTrue:[
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6965
            ^ startIndex
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6966
        ].
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6967
        caseSensitive ifTrue:[
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6968
            startIndex := self indexOf:firstChar startingAt:(startIndex + 1)
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6969
        ] ifFalse:[
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6970
            startIndex := self findFirst:[:c | c sameAs:firstChar] startingAt:(startIndex + 1).
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6971
        ].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6972
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6973
    ^ exceptionBlock value
1005
4507487e0be6 more on encoding/decoding (still unfinished)
Claus Gittinger <cg@exept.de>
parents: 997
diff changeset
  6974
4507487e0be6 more on encoding/decoding (still unfinished)
Claus Gittinger <cg@exept.de>
parents: 997
diff changeset
  6975
    "Modified: 23.2.1996 / 15:35:15 / cg"
9192
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
17191
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6978
indexOfSubCollection:subString startingAt:index ifAbsent:exceptionBlock caseSensitive:caseSensitive ignoreDiacritics:ignoreDiacritics
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6979
    "find a substring, starting at index. if found, return the index;
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6980
     if not found, return the result of evaluating exceptionBlock.
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6981
     This is a q&d hack - not very efficient 
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6982
     (see implementation in string, for a much faster algorithm)"
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6983
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6984
    |firstChar found
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6985
     startIndex "{ Class: SmallInteger }"
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6986
     subSize    "{ Class: SmallInteger }"
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6987
     mySize     "{ Class: SmallInteger }"
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6988
     runIdx     "{ Class: SmallInteger }"
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6989
     tester charMap firstCharMapped findNextIndex|
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6990
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6991
    subSize := subString size.
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6992
    subSize == 0 ifTrue:[
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6993
        subString isString ifFalse:[
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6994
           self error:'non string argument' mayProceed:true.
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6995
        ].
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6996
        "empty string does not match"
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6997
        ^ 0.
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6998
        "empty string matches"
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6999
"/        ^ index
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7000
    ].
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7001
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7002
    mySize := self size.
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7003
    firstChar := subString at:1.
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7004
    ignoreDiacritics ifTrue:[
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7005
        caseSensitive ifTrue:[
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7006
            charMap := [:ch | ch asLowercase withoutDiacritics].
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7007
        ] ifFalse:[
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7008
            charMap := [:ch | ch withoutDiacritics].
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7009
        ].
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7010
        tester := [:c1 :c2 | (charMap value:c1) = (charMap value:c2) ].
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7011
        firstCharMapped := (charMap value:firstChar).
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7012
        findNextIndex := [:index | self findFirst:[:ch | (charMap value:ch) = firstCharMapped] startingAt:index].
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7013
    ] ifFalse:[
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7014
        caseSensitive ifTrue:[
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7015
            tester := [:c1 :c2 | c1 = c2 ].
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7016
            findNextIndex := [:index | self indexOf:firstChar startingAt:index].
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7017
        ] ifFalse:[
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7018
            tester := [:c1 :c2 | c1 sameAs: c2 ].
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7019
            findNextIndex := [:index | self findFirst:[:c | c sameAs:firstChar] startingAt:index].
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7020
        ].
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7021
    ].
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7022
    startIndex := findNextIndex value:index.
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7023
    [startIndex == 0] whileFalse:[
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7024
        runIdx := startIndex.
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7025
        found := true.
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7026
        1 to:subSize do:[:i |
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7027
            runIdx > mySize ifTrue:[
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7028
                found := false
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7029
            ] ifFalse:[
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7030
                (tester value:(subString at:i) value:(self at:runIdx)) ifFalse:[
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7031
                    found := false
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7032
                ]
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7033
            ].
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7034
            runIdx := runIdx + 1
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7035
        ].
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7036
        found ifTrue:[
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7037
            ^ startIndex
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7038
        ].
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7039
        startIndex := findNextIndex value:(startIndex + 1)
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7040
    ].
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7041
    ^ exceptionBlock value
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
    "
17600
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  7044
     '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
  7045
     '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
  7046
0a26280816a3 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17543
diff changeset
  7047
     '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
  7048
     '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
  7049
    "
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7050
!
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  7051
15055
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  7052
rangeOfSubCollection:subString startingAt:start ifAbsent:exceptionValue caseSensitive:caseSensitive
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  7053
    "find a substring. if found, return the start- and endIndex;
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  7054
     if not found, return the value of exceptionValue."
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  7055
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  7056
    |i|
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  7057
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  7058
    i := self indexOfSubCollection:subString startingAt:start ifAbsent:0 caseSensitive:caseSensitive.
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  7059
    i == 0 ifTrue:[
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  7060
        ^ exceptionValue value
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  7061
    ].
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  7062
    ^ i to:(i + subString size - 1)
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  7063
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  7064
    "
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  7065
     'hello world' findRangeOfString:'llo'
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  7066
     'hello world' findRangeOfString:'ole'
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  7067
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7068
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7069
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7070
!CharacterArray methodsFor:'testing'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7071
15829
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  7072
contains8BitCharacters
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  7073
    "return true, if the underlying string contains 8BitCharacters (or widers)
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  7074
     (i.e. if it is non-ascii)"
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  7075
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  7076
    |string|
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  7077
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  7078
    (string := self string) ~~ self ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  7079
        ^ string contains8BitCharacters
15829
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  7080
    ].
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  7081
    ^ self contains:[:aCharacter | aCharacter codePoint > 16r7F ].
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  7082
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  7083
    "
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  7084
     'hello' contains8BitCharacters
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  7085
     'hello' asText allBold contains8BitCharacters
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  7086
    "
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  7087
!
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  7088
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7089
isAlphaNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7090
    "return true, if the receiver is some alphanumeric word;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7091
     i.e. consists of a letter followed by letters or digits."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7092
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7093
    self size == 0 ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  7094
        "mhmh what is this ?"
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  7095
        ^ false
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7096
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7097
    (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
  7098
    ^ self conform:[:char | char isLetterOrDigit].
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  7099
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  7100
    "
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7101
     'helloWorld' isAlphaNumeric
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7102
     'foo1234' isAlphaNumeric
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7103
     'f1234' isAlphaNumeric
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7104
     '1234' isAlphaNumeric
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7105
     '+' isAlphaNumeric
10093
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  7106
    "
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  7107
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  7108
    "Modified: / 13-10-2006 / 12:53:49 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7109
!
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  7110
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  7111
isBinarySelector
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7112
    "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
  7113
     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
  7114
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  7115
    |binopChars|
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  7116
13332
329707312282 changed: #isBinarySelector
Stefan Vogel <sv@exept.de>
parents: 13327
diff changeset
  7117
    (self size > Scanner maxBinarySelectorSize) ifTrue:[^ false].
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  7118
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  7119
    binopChars := Scanner binarySelectorCharacters.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  7120
    ^ (self conform:[:char | (binopChars includes:char)])
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  7121
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  7122
    "
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  7123
     'foo:bar:' isBinarySelector
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  7124
     #foo:bar: isBinarySelector
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  7125
     'hello' isBinarySelector
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  7126
     '+' isBinarySelector
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  7127
     '|' isBinarySelector
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  7128
     '?' isBinarySelector
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  7129
     ':' isBinarySelector
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  7130
     'a:' isBinarySelector
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  7131
     '->' isBinarySelector
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  7132
     '<->' isBinarySelector
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  7133
     '::' isBinarySelector
7482
e73c296fa7dc + isBinarySelector
Claus Gittinger <cg@exept.de>
parents: 7423
diff changeset
  7134
    "
e73c296fa7dc + isBinarySelector
Claus Gittinger <cg@exept.de>
parents: 7423
diff changeset
  7135
e73c296fa7dc + isBinarySelector
Claus Gittinger <cg@exept.de>
parents: 7423
diff changeset
  7136
    "Modified: 4.1.1997 / 14:16:14 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7137
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7138
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7139
isBlank
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7140
    "return true, if the receiver contains spaces only"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7141
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7142
    ^ (self contains:[:char | char ~~ Character space]) not
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7143
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7144
    "
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7145
     '' isBlank
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7146
     '   a    ' isBlank
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7147
     '        ' isBlank
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7148
     '        ' asUnicode16String isBlank
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7149
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7150
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7151
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7152
isKeywordSelector
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7153
    "return true, iff there are only alphanumeric or underline characters separated by colons.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7154
     Must end with a colon."
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7155
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7156
    |state|
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7157
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  7158
    state := #initial.
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7159
    self do:[:char |
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  7160
        (state == #initial or:[ state == #gotColon]) ifTrue:[
17442
eccdc56fffa4 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17371
diff changeset
  7161
            (char isLetterOrUnderline) ifFalse:[^ false].
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  7162
            state := #gotCharacter.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  7163
        ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  7164
            char == $: ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  7165
                state := #gotColon.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  7166
            ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  7167
                (char isLetterOrDigit or:[char == $_]) ifFalse:[^ false].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  7168
            ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  7169
        ].
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7170
    ].
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7171
    ^ state == #gotColon.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7172
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7173
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  7174
     self assert:(':' isKeywordSelector not).
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7175
     self assert:(':a' isKeywordSelector not).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7176
     self assert:('1:' isKeywordSelector not).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7177
     self assert:('a:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7178
     self assert:('_:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7179
     self assert:('_a:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7180
     self assert:('_1:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7181
     self assert:('_1::' isKeywordSelector not).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7182
     self assert:('_:_:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7183
     self assert:('a:b:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7184
     self assert:('aa:bb:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7185
     self assert:('aa:bb:a' isKeywordSelector not).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7186
     self assert:('1:2:' isKeywordSelector not).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7187
    "
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7188
!
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7189
10431
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7190
isNameSpaceSelector
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7191
    "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
  7192
     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
  7193
     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
  7194
     This special format (a symbol starting with a colon) was chosen, because almost every other selector
da227974be48 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17509
diff changeset
  7195
     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
  7196
     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
  7197
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7198
    |i|
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7199
16733
3f4622673efc comment/format only
Claus Gittinger <cg@exept.de>
parents: 16697
diff changeset
  7200
    (self at:1) == $: ifFalse:[^ false].
17511
da227974be48 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17509
diff changeset
  7201
10431
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7202
    i := self indexOf:$: startingAt:2.
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7203
    i == 0 ifTrue:[^ false].
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7204
    self size <= (i+1) ifTrue:[^ false].
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7205
    (self at:i+1) == $: ifFalse:[^ false].
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7206
    (self at:i+2) == $: ifTrue:[^ false].
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7207
    "/ 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
  7208
    ^ true
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7209
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7210
    "test:
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7211
     self assert:('+' isNameSpaceSelector) not.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7212
     self assert:(':+' isNameSpaceSelector) not.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7213
     self assert:(':Foo:+' isNameSpaceSelector) not.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7214
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7215
     self assert:(':Foo::+' isNameSpaceSelector).
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7216
     self assert:(':Foo::bar:baz:' isNameSpaceSelector).
10431
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7217
    "
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7218
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7219
    "Created: / 05-03-2007 / 11:35:31 / cg"
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7220
!
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7221
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7222
isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7223
    "return true, if the receiver is some numeric word;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7224
     i.e. consists only of digits."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7225
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7226
    self size == 0 ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  7227
        ^ false
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7228
    ].
10093
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  7229
    ^ self conform:[:char | char isDigit]
9192
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
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7232
     'helloWorld' isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7233
     'foo1234' isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7234
     'f1234' isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7235
     '1234' isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7236
     '+' isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7237
    "
10093
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  7238
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  7239
    "Modified: / 13-10-2006 / 12:54:12 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7240
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7241
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7242
isString
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7243
    "return true, if the receiver is some kind of string;
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7244
     true is returned here - redefinition of Object>>isString."
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7245
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7246
    ^ true
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7247
!
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7248
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7249
isUnarySelector
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7250
    "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
  7251
17442
eccdc56fffa4 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17371
diff changeset
  7252
    ^ (self first isLetterOrUnderline)
9845
361f4b5d7b19 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9522
diff changeset
  7253
      and:[ self conform: [ :chr | chr isLetterOrDigit or:[chr == $_] ]]
361f4b5d7b19 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9522
diff changeset
  7254
361f4b5d7b19 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9522
diff changeset
  7255
    "Modified: / 13-09-2006 / 11:35:15 / cg"
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7256
!
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7257
14122
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  7258
isUnicode16String
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  7259
    ^ false
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  7260
!
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  7261
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  7262
isUnicode32String
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  7263
    ^ false
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  7264
!
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  7265
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  7266
isUnicodeString
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  7267
    ^ false
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  7268
!
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  7269
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7270
isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7271
    "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
  7272
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7273
    |scanner tok|
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7274
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7275
    scanner := Compiler new.
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7276
    scanner source:(self readStream).
11630
6db5956f188f isValidSmalltalkIdentifier: return true/false (catch parseError)
Claus Gittinger <cg@exept.de>
parents: 11565
diff changeset
  7277
    Parser parseErrorSignal handle:[:ex |
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  7278
        tok := nil.
11630
6db5956f188f isValidSmalltalkIdentifier: return true/false (catch parseError)
Claus Gittinger <cg@exept.de>
parents: 11565
diff changeset
  7279
    ] do:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  7280
        tok := scanner nextToken.
11630
6db5956f188f isValidSmalltalkIdentifier: return true/false (catch parseError)
Claus Gittinger <cg@exept.de>
parents: 11565
diff changeset
  7281
    ].
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7282
    tok ~~ #Identifier ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  7283
        ^ false
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7284
    ].
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7285
    scanner tokenPosition == 1 ifFalse:[^ false].
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7286
    ^ scanner sourceStream atEnd.
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7287
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7288
    "
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7289
     'foo' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7290
     '1foo' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7291
     '_foo' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7292
     '_foo_bar_' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7293
     'foo ' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7294
     ' foo' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7295
    "
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7296
!
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7297
14555
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  7298
isWideString
15829
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  7299
    |string|
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  7300
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  7301
    (string := self string) ~~ self ifTrue:[
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  7302
        ^ string isWideString.
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  7303
    ].
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  7304
    ^ self contains:[:aCharacter | aCharacter codePoint > 16rFF].
14555
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  7305
!
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  7306
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7307
numArgs
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  7308
    "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
  7309
9038
d75b89570ec0 numArgs fixed (binOps can now be longer)
Claus Gittinger <cg@exept.de>
parents: 9019
diff changeset
  7310
    |binopChars|
d75b89570ec0 numArgs fixed (binOps can now be longer)
Claus Gittinger <cg@exept.de>
parents: 9019
diff changeset
  7311
d75b89570ec0 numArgs fixed (binOps can now be longer)
Claus Gittinger <cg@exept.de>
parents: 9019
diff changeset
  7312
    (self size <= Scanner maxBinarySelectorSize) ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  7313
        binopChars := Scanner binarySelectorCharacters.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  7314
        (self conform:[:eachChar | (binopChars includes:eachChar)]) ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  7315
            ^ 1
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  7316
        ].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  7317
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  7318
    ^ self occurrencesOf:$:
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  7319
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  7320
    "
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7321
     'foo:bar:' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7322
     #foo:bar: numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7323
     'hello' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7324
     '+' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7325
     '++' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7326
     '+++' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7327
     '|' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7328
     '?' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7329
     '_' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7330
     '_:' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7331
     '_:_:' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7332
     '<->' numArgs
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  7333
    "
2051
08fd6a693ee3 ask Scanner for valid binarySelector characters in numArgs
Claus Gittinger <cg@exept.de>
parents: 1978
diff changeset
  7334
10088
b8e69093ca13 code cleanup
Claus Gittinger <cg@exept.de>
parents: 10061
diff changeset
  7335
    "Modified: / 13-10-2006 / 11:52:33 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7336
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7337
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7338
partsIfSelector
14629
6491c3b25cd5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14609
diff changeset
  7339
    "treat the receiver as a message selector, return a collection of parts.
6491c3b25cd5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14609
diff changeset
  7340
     Notice: this is more tolerant than Smalltalk's syntax would suggest;
6491c3b25cd5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14609
diff changeset
  7341
     especially it allows for empty keyword parts between colons.
6491c3b25cd5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14609
diff changeset
  7342
     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
  7343
     degenerate selectors as appearing with objectiveC."
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  7344
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7345
    |idx1 "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7346
     coll idx2 sz|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7347
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7348
    coll := OrderedCollection new.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7349
    idx1 := 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7350
    sz := self size.
16245
d16f9c7d9428 [true] whileTrue: -> #loop
Stefan Vogel <sv@exept.de>
parents: 16212
diff changeset
  7351
    [
14629
6491c3b25cd5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14609
diff changeset
  7352
        idx2 := self indexOf:$: startingAt:idx1.
6491c3b25cd5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14609
diff changeset
  7353
        (idx2 == 0 or:[idx2 == sz]) ifTrue:[
6491c3b25cd5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14609
diff changeset
  7354
            coll add:(self copyFrom:idx1).
6491c3b25cd5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14609
diff changeset
  7355
            ^ coll
6491c3b25cd5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14609
diff changeset
  7356
        ].
6491c3b25cd5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14609
diff changeset
  7357
        coll add:(self copyFrom:idx1 to:idx2).
6491c3b25cd5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14609
diff changeset
  7358
        idx1 := idx2 + 1
16245
d16f9c7d9428 [true] whileTrue: -> #loop
Stefan Vogel <sv@exept.de>
parents: 16212
diff changeset
  7359
    ] loop.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7360
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7361
    "
14631
501217c542a5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14629
diff changeset
  7362
     'foo:' partsIfSelector            
501217c542a5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14629
diff changeset
  7363
     'foo:bar:' partsIfSelector    
501217c542a5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14629
diff changeset
  7364
     'foo::::' partsIfSelector     
501217c542a5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14629
diff changeset
  7365
     #foo:bar: partsIfSelector     
501217c542a5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14629
diff changeset
  7366
     'hello' partsIfSelector       
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7367
     '+' partsIfSelector
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7368
    "
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  7369
! !
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  7370
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7371
!CharacterArray methodsFor:'tracing'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7372
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7373
traceInto:aRequestor level:level from:referrer
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7374
    "double dispatch into tracer, passing my type implicitely in the selector"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7375
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7376
    ^ aRequestor traceCharacterArray:self level:level from:referrer
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7377
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
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7380
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7381
!CharacterArray methodsFor:'visiting'!
8395
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  7382
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  7383
acceptVisitor:aVisitor with:aParameter
16733
3f4622673efc comment/format only
Claus Gittinger <cg@exept.de>
parents: 16697
diff changeset
  7384
    "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
  7385
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  7386
    ^ aVisitor visitString:self with:aParameter
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  7387
! !
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  7388
18269
77a84c6693c8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18194
diff changeset
  7389
1849
9f35f5934ec6 added msdos-latin1 en/decoder (code = #msdos850)
Claus Gittinger <cg@exept.de>
parents: 1669
diff changeset
  7390
!CharacterArray class methodsFor:'documentation'!
629
2ceefe9b5a19 version at the end
Claus Gittinger <cg@exept.de>
parents: 608
diff changeset
  7391
2ceefe9b5a19 version at the end
Claus Gittinger <cg@exept.de>
parents: 608
diff changeset
  7392
version
18269
77a84c6693c8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18194
diff changeset
  7393
    ^ '$Header: /cvs/stx/stx/libbasic/CharacterArray.st,v 1.583 2015-04-22 17:45:10 stefan Exp $'
12058
80a7dee97d3c comments
Claus Gittinger <cg@exept.de>
parents: 11955
diff changeset
  7394
!
80a7dee97d3c comments
Claus Gittinger <cg@exept.de>
parents: 11955
diff changeset
  7395
80a7dee97d3c comments
Claus Gittinger <cg@exept.de>
parents: 11955
diff changeset
  7396
version_CVS
18269
77a84c6693c8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 18194
diff changeset
  7397
    ^ '$Header: /cvs/stx/stx/libbasic/CharacterArray.st,v 1.583 2015-04-22 17:45:10 stefan Exp $'
629
2ceefe9b5a19 version at the end
Claus Gittinger <cg@exept.de>
parents: 608
diff changeset
  7398
! !
6809
72fee17c14b1 utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6743
diff changeset
  7399
14606
1aaaa6d79e54 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14592
diff changeset
  7400
2728
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
  7401
CharacterArray initialize!